Today, I Learned

dev-93·2020년 11월 21일
0

Today-I-Learned

목록 보기
1/3

컴파일링

컴파일은 소스코드를 오브젝트 코드로 변환 시키는 과정.
소스코드란 개발자가 C언어와 같은 프로그래밍 언어로 작성한 코드,
오브젝트 코드란 기계어 라고도 알려져 있는데,0과 1로 이루어져 있으며, 컴퓨터에게 프로그램이 어떻게 실행되어야 하는지 알려주는 코드

컴파일의 전체 과정은 4단계로 나누어 볼 수 있다.

예시 - C 코드

전처리(Precompile)

전처리는 전처리기에 의해 수행된다.
전처리기에게 실절적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려준다.

예를들어, #include는 전처리기에게 다른 파일의 내용을 포함시키라고 알려준다.
프로그램의 소스코드에 #include <stdio.h>와 같은 줄을 포함하면, 전처리기는 새로운 파일을 생성하는데, 이 파일은 여전히 C 소스코드 형태이며, stdio.h 파일의 내용이 #include 부분에 포함된다.

컴파일(Compile)

컴파일러라고 불리는 프로그램은 C 코드를 어셈블리어라는 저 수준 프로그래밍 언어로 컴파일 한다.

어셈블리는 여러 연산들이 함께 사용되면 C에서 할 수 있는 모든 것들을 수행할 수 있다. C코드를 어셈블리코드로 변환시켜줌으로써 컴파일러는 컴퓨터가 이해할 수 있는 언어와 치대한 가까운 프로그램으로 만들어 준다. 컴파일이라는 용어는 소스코드 => 오브젝트 코드로 변환하는 전체 과정을 통틀어 일컫기도 하는데, 구체적으로 전처리한 소스코드를 어셈블리 코드로 변환시키는 단계를 말하기도 한다.

어셈블(Assemble)

소스코드가 어셈블리 코드로 변환되면, 다음 단계인 어셈블 단계로 어셈블리 코드를 오브젝트 코드로 변환 시키는 것이다. 컴퓨터가 이해할 수 있는 명령어 형태인 연속된 0과 1들로 바꿔주는 작업. 이 변환 작업은 어셈블러라는 프로그램이 수행한다.

소스코드에서 오브젝트 코드로 컴파일 되어야 할 파일이 오직 한개라면, 컴파일 작업은 여기서 끝이 나지만 그렇지 않은 경우에 링크라 불리는 단계가 추가된다.

만약 프로그램이 (cs50.h, math.h와 같은 라이브러리를 포함해)여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 한다면 링크라는 컴파일의 마지막 단계가 필요하다.
링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합쳐준다.

출처: https://www.edwith.org/boostcourse-cs-050/lecture/119011/

profile
티스토리로 이동했어요

0개의 댓글