컴파일이란?
인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어(기계어)로 변환 하는 작업을 말한다. 소스코드는 컴파일 과정을 통해 기계어로 이루어진 실행 파일이 되며 이 파일을 실행하면 실행 파일 내용이 운영체제의 Loader를 통해 메모리에 적재되어 프로그램이 동작한다.
컴파일 과정
컴파일 과정은 4가지 단계 전처리 과정 - 컴파일 과정 - 어셈블리 과정 - 링킹 과정으로 나뉜다.
전처리 과정(Pre-processing)
전처리기(Processor)를 통해 소스 코드 파일(*.c)을 전처리된 소스 코드 파일(*.i)로 변환하는 과정이다.
1) 주석 제거
2) 헤더 파일 삽입
#include 지시문을 만나면 해당하는 헤더 파일(e.g. stdio.h)를 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다.
3) 매크로 치환 및 적용
#define MAX_NUM = 100와 같은 구문 처리
4) 결과물
포함된 헤더 파일에 정의된 변수와 함수를 포함하는 hello.i
컴파일 과정(Compile)
컴파일러(Compiler)를 통해 전처리된 소스 코드 파일(.i)를 어셈블리어 파일(.s)로 변환하는 과정이다.
1) 언어의 문법 검사
2) Static한 영역의 메모리 할당
3) 결과물
어셈블리어 형태의 데이터와 코드를 포함하고 있는 hello.s 이다.
어셈블리 과정(Assembly)
어셈블러(Assembler)를 통해 어셈블리어 파일(.s)을 오브젝트 파일(.o)로 변환하는 과정이다.
링킹 과정(Linking)
링커(Linker)을 통해 오브젝트 파일(*.o)들을 묶어 실행 파일로 만드는 과정이다. 이 과정에서 오브젝트 파일들과 프로그램에서 사용하는 라이브러리 파일들을 링크하여 하나의 실행 파일을 만든다.
1) 결과물
코드와 데이터를 포함하는 실행 가능한 바이너리파일 이다. hello.exe
기타 내용
- 시스템 온 칩
하나의 집적회로(IC)에 컴퓨터의 모든 기능을 구현한 것을 말한다. CPU, GPU, 메모리, 컨트롤러, 비디오 출력 장치 등 다양한 기능을 하나의 칩에 집적하여, 시스템의 크기와 전력 소비를 줄이고, 비용을 절감할 수 있다. - GPU
그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치이며
모바일 기기에서도 최근 사용된다.
'cs기초' 카테고리의 다른 글
프로세스 & 스레드 & 메모리 (0) | 2023.08.10 |
---|---|
컴퓨터 & 운영체제 (0) | 2023.08.10 |
네트워크 (0) | 2023.08.10 |