본문 바로가기

Programming/용어정리

compile, link, build, load 개념정리

요약) 소스 파일이 컴파일러에 의해 목적 파일object file로 컴파일되고, 링커linker가 목적 파일들을 연결해 하나의 실행 파일(exe)을 만들며 이 과정을 합쳐 빌드build라고 일컫는다. 해당 실행 파일을 실행될 때 프로그램의 정보들이 메모리로 저장되는데 이를 로드load라 한다.
 
<우리가 짠 코드가 실행되기까지의 과정>
 
소스 파일(.c 확장자) --(1)--> 소스 파일(.c 확장자) --(2)--> 목적 파일(.obj 확장자) --(3)--> 실행 파일(.exe 확장자) --(4)--> 프로세스(process)
 
(n) :             A를 수행      by      B에 의해
(1) : 전처리(preprocess) by 전처리기(preprocessor)
- #define, #include 등 실행됨
(2) : 컴파일(compile) by 컴파일러(compiler)
- 소스 파일을 목적 파일(기계어)로 변환
(3) : 링크(link) by 링커(linker)
- 목적 파일들을 묶어서 하나의 실행 파일을 만듦.
(4) : 로드(load) by 로더(loader)
- 이하설명.
 
* 해당 순서를 서술하는 글들에서 보통 (1)은 생략됨. 그러나 생략된다고 해서 실제로 없는 과정인건 아님!
** (1), (2), (3)의 과정을 합쳐서 빌드(build)라고 부름.
*** 소스 파일의 경우 프로그래밍 언어로 짜여져 있으나, 컴파일러가 소스 파일을 목적 파일로 만들 때 기계어로 변환하므로, 목적 파일과 실행 파일은 기계어로 이루어져 있음.
 
로드(load) : 프로그램이 처음 실행될 때 프로그램의 정보들을 보조 기억장치(ssd, 하드디스크)에서 주기억장치(메모리)로 불러들이는 과정.
프로세스 : 실행 중인 프로그램 <- 운영체제로부터 메모리를 할당받음
load 과정 자체가 해당 프로그램의 내용을 메모리에 적재시키는 것이므로,
즉 load 된 프로그램 = 실행 중인 프로그램 = 프로세스(process) 라고 생각해도 무방할 듯 함.
 
참고, 영어 정의) program = set of instructions, process = program in excution