일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- BFS
- 안드로이드
- Redux
- vscode
- 동적 계획법
- Graph
- git
- VIM
- DP
- 자바
- 알고리즘
- db
- 프로그래머스
- 그레이들
- react
- frontend
- 백준
- TypeScript
- CS
- Javascript
- 다이나믹 프로그래밍
- network
- 리트코드
- Algorithm
- java
- LeetCode
- DFS
- Python
- Database
- Data Structure
- Today
- Total
늘 겸손하게
CS - Operating System - 프로세스 컴파일 과정 본문
CS - Operating System - 프로세스 컴파일 과정
besforyou999 2023. 4. 22. 22:16프로그램 컴파일 과정
C 언어 기준으로 설명하겠습니다.
컴파일 과정은 크게 전처리 과정 -> 컴파일 과정 -> 어셈블리 과정 -> 링킹 과정을 거친다.
소스 코드 파일(*.c)이 전처리 과정 (Pre-processing)을 거치면 전처리된 소스 코드(*.i)가 되고
컴파일러를 거치면 어셈블리어 파일이 되고
어셈블리어 파일이 어셈블러를 거치면 목적 코드가 됩니다.
링커는 목적 코드와 프로그램 내에 있는 라이브러리 함수와 다른 목적코드들을 결합해 실행 파일(exe, out)을 만듭니다.
전처리
소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환합니다.
컴파일
오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환합니다.
어셈블리
어셈블리어는 목적 코드(object code)로 변환됩니다.
이때 확장자는 운영체제마다 다른데 리눅스에서는 .o입니다.
링커
프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드(object code)를 결합하여 실행 파일을 만듭니다.
실행 파일의 확장자는 .exe 또는 .out이라는 확장자를 갖습니다.
정적 라이브러리와 동적 라이브러리
정적 라이브러리는 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식으로 시스템 환경 등 외부 의존도가 낮은 장점과 코드 중복 등 메모리 효율성이 떨어지는 단점이 있습니다.
동적 라이브러리는 프로그램 실행 시 필요할 때만 DDL이라는 함수 정보를 통해 참조하는 방식이며, 모든 코드를 실행 파일에 담지 않아 메모리 사용에서 효율적인 장점이 있으나 외부 의존도가 높아지는 단점이 있습니다.
'Computer Science > Operating System' 카테고리의 다른 글
CS - Operating System - 멀티 프로세싱 & 멀티 스레딩 (0) | 2023.04.23 |
---|---|
CS - Operating System - 페이지 교체 알고리즘 (0) | 2023.04.22 |
CS - Operating System - 메모리 할당 (0) | 2023.04.18 |
CS - Operating System - 메모리 관리 (0) | 2023.04.16 |
CS - Operating System - 캐시 (cache) (0) | 2023.04.16 |