산타는 없다

동적/공유 라이브러리(Dynamic/ Shared Library)와 동적 링킹(Dynamic Linking) 본문

Computer Science/운영체제

동적/공유 라이브러리(Dynamic/ Shared Library)와 동적 링킹(Dynamic Linking)

LEDPEAR 2021. 5. 31. 01:06
반응형

동적/공유 라이브러리는 런타임에 링크/로드되는 라이브러리입니다.

공유 라이브러리(Dynamic Linking)와 동적 라이브러리(Dynamic Loading)는 똑같이 런타임에 메모리에 적재되는데 공유 라이브러리는 응용 프로그램이 시작되는 순간에 메모리에 적재되고 동적 라이브러리는 응용 프로그램이 라이브러리의 내용이 필요할 때 적재하게 됩니다.

동적 라이브러리는 이를 사용하고자 하는 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나, 아예 독립적으로 로드/사용/해제할 수 있습니다.


동적 라이브러리의 특징

동적 라이브러리는 정적 라이브러리와 다르게 컴파일할 때 코드가 복사되지 않고 프로그램 시작 시 로딩됩니다. 이때 메모리에 이미 로딩되어 있다면 라이브러리 코드 영역을 공유해서 사용할 수 있습니다.

이러한 특징 때문에 동적 라이브러리는 정적 라이브러리에 비해 프로그램의 사이즈가 작고 메모리 공간을 적게 차지하는 장점이 있습니다.

하지만 라이브러리와 실행바이너리 사이의 연결 시간이 있기 때문에 정적 라이브러리를 실행하는 것보다 느립니다.

또, 라이브러리를 수정하게 되면 라이브러리를 사용하는 실행파일을 다시 컴파일 해야하는 정적 라이브러리와 다르게 동적 라이브러리는 라이브러리 파일만 교체하여 적용할 수 있습니다. 단 함수의 인수 및 반환 값이 변경되었으면 다시 링크시켜야 합니다.

동적 라이브러리의 코드는 메모리의 공유 라이브러리 영역에 저장됩니다.


동적 링킹

동적 라이브러리 중, Window에서 구현된 동적 링크 라이브러리(Dynamic link library, DLL)를 사용하는 방법은 두가지가 있습니다.

  • 묵시적 링킹 (Implicit linking) : 실행 파일 자체에 어떤 DLL의 어떤 함수를 사용하겠다는 정보를 포함시키고 운영체제가 프로그램 실행 시 해당 함수들을 초기화한 후 그것을 이용하는 방법
  • 명시적 링킹 (Explicit linking) : 프로그램이 실행 중일 때 API를 이용하여 DLL 파일이 있는지 검사하고 동적으로 원하는 함수만 불러와서 쓰는 방법

묵시적 링킹은 공유 라이브러리(Dynamic Linking)과 명시적 링킹은 동적 라이브러리(Dynamic Loading)과 일맥상통합니다.

 


참고

http://blog.naver.com/PostView.nhn?blogId=xogml_blog&logNo=130138049704

 

반응형
Comments