2026/05/20 5

링크 단계

링크 단계 (Linking)링커(Linker)가 여러 개의 오브젝트 파일과 라이브러리를 연결하여 최종 실행 파일을 생성하는 과정링크 단계에서 수행하는 작업오브젝트 파일 병합심볼 해석(Symbol Resolution)주소 할당(Address Assignment)재배치(Relocation)오브젝트 파일 병합컴파일/어셈블 단계에서 생성된 여러 오브젝트 파일들을 하나로 연결하는 과정예시:Player.objEnemy.objGame.obj↓Game.exe심볼 해석 (Symbol Resolution)현재 오브젝트 파일이 참조하는 함수나 변수가 실제 어디에 존재하는지 찾는 과정예시:extern void Attack();Attack();링커는 Attack 심볼이 어느 오브젝트 파일에 있는지 탐색함주소 할당 (Addres..

c++/기초 2026.05.20

심볼과 심볼 테이블

심볼(Symbol)과 심볼 테이블(Symbol Table)외부 라이브러리나 다른 파일에 있는 함수, 전역 변수의 위치를 찾기 위해 사용됨컴파일 과정에서 생성되며, 이후 링크 단계에서 링커가 이를 참조하여 실제 메모리 주소를 연결함심볼 (Symbol)함수나 전역 변수를 식별하기 위한 정보객체 자체가 아니라 객체를 가리키는 이름표 예시void Attack(){}int HP = 100;생성되는 심볼 예시:AttackHP심볼이 포함하는 정보함수/변수 이름섹션 정보오프셋(상대 위치)참조 정보 심볼 테이블 (Symbol Table)심볼들을 저장하는 테이블특징오브젝트 파일 하나당 하나씩 존재컴파일/어셈블 단계에서 생성오브젝트 파일 내부 메타데이터로 저장됨왜 필요한가?다른 파일의 함수나 변수를 사용하려면 위치를 알아야..

c++/기초 2026.05.20

어셈블리 단계

어셈블리 단계 (Assembly)컴파일 단계에서 생성된 어셈블리 코드를 실제 CPU가 실행 가능한 기계어(바이너리 코드)로 변환하는 과정어셈블리 코드를 기계어로 변환함오브젝트 파일(.o, .obj) 생성심볼 테이블(Symbol Table) 생성재배치 정보(Relocation) 생성어셈블러 (Assembler)어셈블리 코드를 기계어로 변환하는 프로그램어셈블리어 → 기계어변환 수행어셈블러의 역할어셈블리 명령어를 CPU 아키텍처에 맞는 기계어로 변환코드와 데이터를 섹션 단위로 분리심볼 테이블 생성재배치 정보 생성섹션 (Section)오브젝트 파일 내부에서 코드와 데이터를 구분하는 영역섹션역할.text실행 코드 저장.data초기화된 전역 변수 저장.bss초기화되지 않은 전역 변수 저장.rodata읽기 전용 데이..

c++/기초 2026.05.20

컴파일 단계

컴파일 단계 (Compilation)전처리된 소스 코드를 기계어로 변환하는 과정각 소스 파일(.cpp)은 개별적으로 컴파일됨컴파일이 완료되면 각각의 오브젝트 파일(Object File)이 생성됨오브젝트 파일 (Object File)컴파일 단계가 완료되면 생성되는 파일확장자 종류.o.obj운영체제와 컴파일러에 따라 확장자가 달라짐운영체제별 확장자운영체제확장자Linux, macOS (UNIX 계열).oWindows.obj컴파일러별 확장자컴파일러확장자GCC (GNU Compiler Collection).oMSVC (Microsoft Visual C++).obj기계어 변환 과정C++(고급 언어)↓어셈블리어(저급 언어)↓기계어(네이티브 코드)전처리된 소스 코드는 이러한 과정을 거쳐 CPU가 실행 가능한 기계어로 ..

c++/기초 2026.05.20

전처리 단계

전처리 단계 (Preprocessing)컴파일 전에 소스 코드를 가공하는 단계전처리기(Preprocessor)가 #으로 시작하는 전처리 지시어를 처리함.소스 코드의 주석이 제거됨#include, #define, #ifdef 등의 지시어를 처리함실제 컴파일 전에 코드가 치환되고 정리됨전처리 지시어 종류1. #include헤더 파일 포함 지시어#include #include "Player.h"의미해당 파일의 내용을 현재 소스 코드 위치에 그대로 복사함.즉,#include "Player.h"는 실제로는 Player.h 내부 코드가 현재 파일에 삽입되는 것과 같음.목적코드 재사용여러 파일에서 공통 코드를 재사용 가능#include "Math.h"모듈화헤더 파일(.h)에는 선언소스 파일(.cpp)에는 구현으로 분..

c++ 2026.05.20