본문 바로가기
cs/CS50

3: 배열-1(컴파일링)

by 이쟝 2021. 11. 25.

1. 컴파일링

  • 간단하게 말하면 소스코드(원시코드)를 목적코드(머신코드)로 변환하는 것 
  • make나 clang 명령어를 사용해서 프로그램을 실행할 때(컴파일을 할 때) 네 단계를 거치게 됨

전처리(Precompile) - 컴파일링 - 어셈블링 - 링킹

 

1) 전처리(Precompile)

  • 전처리기에 의해 전처리가 수행됨
  • #으로 시작되는 C 소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려줌
  • 예) #include는 전처리기에게 다른 파일의 내용을 포함시키라고 알려줌. 프로그램의 소스코드에 #include와 같은 줄을 포함하면 전처리기는 새로운 파일을 생성하는데 이 파일은 여전히 C 소스 코드 형태이고 stdio.h 파일의 내용이 #include 부분에 포함됨

2) 컴파일(Compile)

  • 전처리기가 전처리한 소스 코드를 생성하고 나면 컴파일을 한다.
  • 컴파일러라고 불리는 프로그램은 C 코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일
  • 어셈블리는 C보다 연산의 종류가 훨씬 적지만, 여러 연산들이 함께 사용되면 C에서 할 수 있는 모든 것들을 수행할 수 있음
  • C코드를 어셈블리 코드로 변환시켜서 컴파일러는 컴퓨터가 이해할 수 있는 언어와 최대한 가까운 프로그램으로 만들어 줌
  • 컴파일러라는 용어는 소스 코드에서 오브젝트 코드로 변환하는 전체 과정을 통틀어 일컫기도 하지만, 구체적으로 전처리한 소스 코드를 어셈블리 코드로 변환시키는 단계를 말함

3) 어셈블(Assemble)

  • 소스 코드가 어셈블리 코드로 변환되면 다음 단계는 어셈블 단계로 어셈블리 코드를 오브젝트 코드로 변환시키는 것
  • 컴퓨터의 중앙처리장치(CPU)가 프로그램을 어떻게 수행해야 하는지 알 수 있는 명령어 형태인 연속된 0과 1들로 바꿔주는 작업
  • 이 변환작업은 어셈블러라는 프로그램이 수행함
  • 소스 코드에서 오브젝트 코드로 컴파일되어야 할 파일이 한 개라면 컴파일 작업은 끝나지만 그렇지 않으면 링크라는 불리는 단계가 추가됨

4) 링크(Link)

  • 프로그램이 (math.h나 cs50.h와 같은 라이브러리를 포함해) 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 한다면 링크라는 컴파일의 마지막 단계가 필요함
  • 링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합쳐 줌
  • 예) 컴파일하는 동안에 cs50 라이브러리를 링크하면 오브젝트 코드는 GetInt( )나 GetString( ) 같은 함수를 어떻게 실행할지 알 수 있게 함
  • 이 네 단계를 거치면 최종적으로 실행 가능한 파일이 완성된다!

*object code(목적 코드 또는 목적 파일): 소스코드 컴파일의 결과물, 컴파일된 파일

- 컴파일러나 어셈블러가 소스 코드 파일을 컴파일 또는 어셈블 해서 생성하는 파일

 

 

 

https://www.boostcourse.org/cs112/joinLectures/41307

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

 

'cs > CS50' 카테고리의 다른 글

3: 배열-3(메모리와 배열:전역변수)  (0) 2021.11.25
3: 배열-2(버그와 디버그)  (0) 2021.11.25
2: C언어-6(오버플로우)  (0) 2021.11.24
2: C언어-5(중첩 루프)  (0) 2021.11.24
2: C언어-4(자료형, 연산자)  (0) 2021.11.24