Skip to content

Latest commit

 

History

History
46 lines (26 loc) · 1.72 KB

[c] C언어 컴파일 과정.md

File metadata and controls

46 lines (26 loc) · 1.72 KB

C언어 컴파일 과정


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


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


  1. 전처리 과정

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

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

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

  3. 어셈블 과정

    컴파일이 끝나면 어셈블리 코드가 됨. 이 코드는 어셈블러에 의해 기계어가 된다.

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

  4. 링킹 과정

    오브젝트 파일들과 프로그램에서 사용된 C 라이브러리를 링크함

    해당 링킹 과정을 거치면 실행파일이 드디어 만들어짐