1. 전처리기
- #으로 시작하는 지시자에 따라 실행파일 생성에서 가장 먼저 실행됨
- 소스코드의 주석 제거, define 치환, 매크로 치환 등...
2. 컴파일러
- 전처리기를 거친 소스코드는 컴파일러에 의해 어셈블리 코드로 변환됨
- 어셈블리 코드는 CPU 명령어 조합, 따라서 어셈블리어는 CPU에 의존적임
3. 어셈블러
- 컴파일러를 거친 어셈블리 코드는 어셈블러에 의해 오브젝트 코드로 변환됨
- 오브젝트 코드는 0과 1로 구성된 이진코드이며, 주소정보는 아직 확정되지 않은 상태임
4. 링커
- 어셈블러를 거친 오브젝트 코드는 링커에 의해 사용된 함수 라이브러리와 하나로 묶여 실행파일로 변환됨
- 운영체제의 로더가 메모리에 로딩(적재)할 수 있도록 주소정보를 적절하게 할당함,
따라서 링커는 운영체제에 의존적임
# 빌드란?
- 컴파일 + 링크 과정을 합친 것
- 컴파일 : 소스코드를 오브젝트 코드로 변환
- 링크 : 컴파일 과정을 거친 오브젝트 코드와 사용된 함수 라이브러리를 묶어서 실행파일로 만듦
- 컴파일 과정은 위에서 설명한 1. 전처리기, 2. 컴파일러, 3. 어셈블러 를 거치면서,
소스코드 => 어셈블리 코드 => 오브젝트 코드 로 변환한다.
- 링크 과정은 위에서 설명한 4. 링커 를 통해,
오브젝트 코드 => 실행파일 로 변환한다.
* 인터프리터
- 어떤 대상을 다른 형태로 만들지 않고 바로 실행하는 프로그램
* 컴파일러 장점
- 컴파일을 한번만 해두면, 그대로 사용이 가능
- 기억장소의 크기 조정이 가능
- 전체 실행시간 면에서 매울 효율적
- 컴파일러는 매번 번역을 할 필요가 없음
* 컴파일러 단점
- 컴파일 과정이 복잡하고 시간이 많이 걸림
- 프로그램은 큰 기억용량을 요구
* 인터프리터 장점
- 프로그램이 될 때까지 소스코드의 형태를 유지하기 때문에 기억장소가 따로 필요없음
* 인터프리터 단점
- 원시 프로그램을 직접 실행하기에 이 실행에 필요한 소프트웨어가
항상 기계 안에 상주하면서 원시 프로그램의 명령들을 받아서 처리해야 함
- 위와 같은 과정을 반복하게 되면, 그 때마다 원시 프로그램을 해석하고 처리해야 하기 때문에 비효율적
=> 실행시간이 컴파일러 방법에 비해 비효율적
- 실행순서를 맞춰주어야 함(실행시간 설정을 해놓아야 함)
'Programming' 카테고리의 다른 글
C 문자열 함수 정리 (0) | 2020.08.24 |
---|---|
문제해결 및 실습 : C++(3학년 1학 (0) | 2020.08.22 |