C언어 컴파일 과정

기술노트
Admin (토론 | 기여)님의 2025년 4월 17일 (목) 16:27 판 (컴퓨터 과학 용어 정리 - C언어 컴파일 과정 추가)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

C언어 컴파일 과정

---

gcc를 통해 C언어로 작성된 코드가 컴파일되는 과정을 알아보자


<img src="https://t1.daumcdn.net/cfile/tistory/254DB03A58326E501C">

이러한 과정을 거치면서, 결과물은 컴퓨터가 이해할 수 있는 바이너리 파일로 만들어진다. 이 파일을 실행하면 주기억장치(RAM)로 적재되어 시스템에서 동작하게 되는 것이다.


1. #### 전처리 과정

  - 헤더파일 삽입 (#include 구문을 만나면 헤더파일을 찾아 그 내용을 순차적으로 삽입)
  - 매크로 치환 및 적용 (#define, #ifdef와 같은 전처리기 매크로 치환 및 처리)
  

2. #### 컴파일 과정 (전단부 - 중단부 - 후단부)

  - 전단부 (언어 종속적인 부분 처리 - 어휘, 구문, 의미 분석)
  - 중단부 (SSA 기반으로 최적화 수행 - 프로그램 수행 속도 향상으로 성능 높이기 위함)
  - 후단부 (RTS로 아키텍처 최적화 수행 - 더 효율적인 명령어로 대체해서 성능 높이기 위함)
  

3. #### 어셈블 과정

  > 컴파일이 끝나면 어셈블리 코드가 됨. 이 코드는 어셈블러에 의해 기계어가 된다.
  - 어셈블러로 생성되는 파일은 명령어와 데이터가 들어있는 ELF 바이너리 포맷 구조를 가짐
    (링커가 여러 바이너리 파일을 하나의 실행 파일로 효과적으로 묶기 위해 `명령어와 데이터 범위`를 일정한 규칙을 갖고 형식화 해놓음)
  

4. #### 링킹 과정

  > 오브젝트 파일들과 프로그램에서 사용된 C 라이브러리를 링크함
  >
  > 해당 링킹 과정을 거치면 실행파일이 드디어 만들어짐