(수근수근)

Linking / Linker 본문

C++

Linking / Linker

InformationFarm 2020. 5. 15. 15:31

링킹(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
Comments