반응형
컴파일이란?
컴파일은 인간이 이해할 수 있는 언어로 작성된 소스 코드를(고수준 언어 : C, C++, Java 등)를 컴퓨터가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 과정을 말한다.
소스 코드는 컴파일을 통해서 기계어로 이루어진 실행 파일이 된다.(exe 파일) 이 파일을 실행하면 실행 파일이 운영체제의 Loader를 통해서 메모리에 적재(Load)되어 프로그램이 동작한다.
- 전처리기(Preprocessor) : #로 시작하는 부분(#include, #define)을 소스코드로 변경해 준다. #include 같은 경우 해당 헤더파일에서 코드를 복붙 해주고, #define의 경우 정의한 값, 또는 식으로 치환해 준다. 예를 들어 C++에서 <iostream> 라이브러리를 include 시키고, 코드에 << cout; 이 있으면 라이브러리에서 해당 cout 함수 코드를 복사해 준다.
- 컴파일러(Compiler) : 컴파일러는 전처리기로 확장된 소스코드를 기계어에 근접한 어셈블리어로 번역해 준다. 엄밀히 말하면 아직까지는 이진수로 번역된 상태는 아니다.
- 어셈블러(Assembler) : 어셈블리 언어를 기계어로 번역해 준다. 이 단계에서 생성된 파일을 목적 파일(Object file)이라고 한다. 여기까지를 보통 컴파일이라고 말한다.
- 링커(Linker) : 링크는 여러 개의 목적 파일(Object file)을 하나의 실행파일(.exe)로 합치는 과정이다. 실행 파일은 타켓 파일이라고도 한다.
하나의 C++ 프로젝트에 여러 개의 소스코드 파일이 있으면 각 소스코드마다 목적 파일이 생성되고, 링커가 모든 목적 파일과 라이브러리를 종합하여 하나의 타켓 파일을 생성한다.
- 소스코드 ~ 목적파일 생성까지를 Compiling으로 부른다.
- 목적파일 ~ 타켓 파일까지를 Linking으로 부른다.
- Compiling 구간만을 컴파일로 보는 관점 '좁은 의미의 컴파일'
- Compiling + Linking 전 과정을 컴파일로 보는 관점 '넓은 의미의 컴파일'
참고 사이트
'하드웨어 > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터 핵심 부품에 대해서 (0) | 2024.08.12 |
---|---|
바이트 크기에 대해서 (1) | 2023.12.14 |
논리 회로(Logic Gate)에 대해 알아보자 (0) | 2023.10.11 |
보수(Complement)에 대해서 알아보자 (2) | 2023.10.06 |
전기로 뺄셈을 표현하는 반감산기, 전감산기 (0) | 2023.09.21 |
댓글