내가 설명해보는 컴파일
컴퓨터는 0 과 1로 이루어진 2진수를 읽어 계산을 해주는 기계다. 하지만 사람들의 언어는 문자로 이루어져 있고 컴퓨터는 이런 고급 언어는 이해하지 못한다. 하지만, C++을 코딩 할때에는 cout, cin printf 등 우리가 이해할 수 있는 고급어로 이루어져 있다. 이건 C++이라는 언어가 cout, cin, printf 같은 단어에 동작 메크로를 0과 1로 구현하고 사람이 사용하기 편하게 만들었기 때문이다. 컴파일이란 사람이 구현한 고급 언어를 컴퓨터가 정의해 놓은 동작 메크로를 0과 1로 변환하여 읽고 그것 대로 동작을 수행하는 동작이다.
위와 같이 내가 아는 컴파일이라는 동작을 설명 해봤다. 아래 내용부터는 위의 내용을 보충하기 위해 찾아본 내용을 추가로 컴파일에 대해 작성 해보았다.
1. 전처리 (Preprocessing)
본격적인 번역을 하기 전에 코드를 정리하는 준비 단계 소스 파일을 읽어서 전처리기(Preprocessor)가 다음과 같은 작업을 수행한다.
- 헤더 파일 삽입: #include로 시작하는 부분을 해당 파일의 내용으로 그대로 복사해서 붙여넣는다.
- 매크로 치환: #define으로 정의된 상수나 매크로 함수를 실제 값이나 코드로 치환.
2. 컴파일 (Compilation)
전처리가 끝난 파일을 어셈블리어라는 중간 언어로 번역하는 단계. 이 단계가 좁은 의미의 '컴파일'입니다.
- 문법 검사: 오타나 문법 오류를 여기서 잡아냅니다.
- 최적화: 코드를 더 효율적으로 동작하도록 구조를 일부 변경하기도 합니다.
3. 어셈블리 (Assembly)
어셈블리 코드를 실제 기계어(0과 1로 이루어진 바이너리 코드)로 변환하는 단계입니다.
- 결과물: 목적 파일이 생성.
- 하지만 이 파일은 기계어지만, 아직 실행은 불가능. 다른 파일들과 연결되지 않았기 때문이다.
4. 링킹 (Linking)
여러 개의 목적 파일과 라이브러리 파일들을 하나로 합쳐서 실행 가능한 파일을 만드는 최종 단계.
- 연결: main.cpp에서 다른 파일에 있는 함수를 호출했다면, 그 함수의 실제 위치를 찾아서 연결해줍니다.
이렇게 정리 하고 다시 보면 맞는 부분도 있지만 과정을 자세히 설명하지 못했다.
찾아본 정보를 요약하자면
- 전처리: 매크로 치환, 헤더 포함
- 컴파일: 문법 검사, 어셈블리어 변환
- 어셈블: 기계어 변환, 목적 파일 생성
- 링킹: 여러 파일을 합쳐 실행 파일 생성
'CS' 카테고리의 다른 글
| CPU 스케쥴링 (0) | 2026.03.20 |
|---|---|
| CPU의 구조 및 클럭, 코어 (0) | 2026.02.06 |
