(수근수근)
Linking / Linker 본문
링킹(Linking)이란?
* 오브젝트 파일 : 컴파일 된 파일
하나의 프로그램은 오프벡트 파일과 공용 라이브러리로 조합이 되어 하나의 프로그램이 된다.
컴퓨터가 실행할 수 있는 프로그램을 만드는 작업을 링킹이라고 한다,
링킹 작업을 마치면 .exe파일이 생성된다.
exe파일을 실행하면 해당프로그램 내용을 메모리에 적재(Load)시키고 프로그램을 수행한다.
이런 일을 수행하는 프로그램을 로더(Loader)라고 한다.
코드 작성 -- (컴파일) --> 오브젝트 파일 -- (링킹) --> 실행 파일 -- (로드) --> 메모리 적재 및 수행
링커(Linker)란?
링킹작업을 마무리 하면 object 파일이 만들어진다고 됩니다!
이런 오브젝트파일은 기계어로 번역되어집니다.
이렇게 만들어진 Object file을 링커가 링킹을 해서 exe파일로 만듭니다!
링커가 하는 일
1) 여러 오브젝트 파일에 있는 동일한 섹션을 하나의 덩어리로 만든다!
2) 라이브러리를 합친다. ex) #include <iostream> 같은 것
Static Linking vs Dynamic Linking
Static Linking : 실행파일 생성시 라이브러리를 같이 포함시켜서 .exe파일을 만드는것
-링커가 실행파일에 필요한 부분을 바로 복사하여 미리컴파일 되어있어 시간 단축
- 기술 유출이 방지가된다.
- but! 실행파일에 라이브러리 코드 저장 메모리를 많이 잡아먹는다.
- 멀티 유저 프로그램인 경우 최악..
Dynamic Linking : static의 단점을 보완/ 많이 쓰이는 라이브러리 메모리 하나에 올리자.
- 동적링크 라이브러리를 DLL이라고 한다, 윈도우에서 동적링킬할때 사용되는 라이브러리파일
- 동적라이브러리는 프로그램이 실행될때 링크된다.
- 메모리 요청사항이 적다,
- overhead량이 증가한다.
'C++' 카테고리의 다른 글
[C++] #define 대신 const enum inline (0) | 2020.05.18 |
---|---|
[C++] 기초 관련 용어 (0) | 2020.05.18 |
암호화 알고리즘 AES-256 (0) | 2020.05.07 |
[C++]선형자료구조 - vector (0) | 2020.04.06 |
HashMap 자료구조 study (0) | 2020.04.06 |