산타는 없다

라이브러리의 정의와 종류 (정적 / 동적) 본문

Computer Science/운영체제

라이브러리의 정의와 종류 (정적 / 동적)

LEDPEAR 2021. 5. 17. 13:55
반응형

라이브러리(Library)는 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일입니다.

라이브러리는 재사용이 필요한 기능이 반복적인 코드 작성을 하지 않고 언제든지 필요한 곳에서 호출하여 사용한다는 목적을 가지고 만들어집니다.

링크될 수 있도록 보통 컴파일된 형태인 목적 코드(object code)형태로 존재하며 미리 컴파일 되어 있기 때문에 컴파일 시간도 단축됩니다.


라이브러리는 크게 정적 라이브러리와 동적 라이브러리 두 종류로 사용됩니다.
두 라이브러리의 가장 큰 차이점은 실행파일에 링킹되는 시점입니다.

정적 라이브러리 / Static Library / Lib

작성된 소스 코드는 번역 프로그램(컴파일러, 인터프리터 등)을 통해 목적 프로그램으로 번역되고 목적 프로그램은 링킹을 통해 다른 목적 프로그램이나 라이브러리와 연결되어 로드 모듈 즉, 실행 파일로 만들어집니다.

이때, 링커에 의해 목적 프로그램과 링킹 되는 라이브러리가 정적 라이브러리이며 컴파일 타임에 대상 실행파일로 복사됩니다.

정적 라이브러리는 빌드/링크 과정에서 하나의 실행 파일을 만들기 위해 다른 정적 라이브러리 또는 목적 파일과 통합되거나, 런타임 시점에 대응하는 실행 파일의 주소 공간에서 컴파일 타임/ 링크 타임 동안 결정된 정적 메모리 오프셋 위치에 로드됩니다.

자세한 내용은 아래 링크에서 확인할 수 있습니다.

[Computer Science/운영체제] - 정적 라이브러리(Static Library) 와 정적 링킹(Static Linking)

 

정적 라이브러리(Static Library) 와 정적 링킹(Static Linking)

정적 라이브러리는 컴파일타임에 링킹되는 라이브러리입니다. 정적 라이브러리가 링킹되는 것을 정적 링킹(Static Linking)이라고 합니다. 정적 링킹은 실행파일을 만들 때 프로그램에서 사용하는

ledpear.tistory.com

동적 라이브러리 / Dynamic Library / Dll

컴파일타임에 연결되는 정적 라이브러리와 다르게 동적 라이브러리는 런타임에 연결됩니다.

정적 라이브러리와 가장 큰 차이점은 같은 내용의 라이브러리를 사용할 때 각각의 프로세스마다 메모리에 라이브러리 내용을 할당하는 것이 아닌 한 내용만 할당하여 공유해 사용할 수 있다는 점입니다.

이러한 특징은 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하지 않고 해당 모듈의 주소만을 가지고 있다가, 런타임에 실행 파일과 라이브러리가 메모리에 위치될 때 해당 모듈의 주소로 가서 필요한 것만 들고 오는 방식이기 때문입니다. 런타임에 운영체제에 의하여 이러한 작업이 수행됩니다.

정적 라이브러리는 실행할 때 라이브러리의 내용을 모두 메모리에 로드하는 반면에 동적 라이브러리는 메모리에 이미 존재하는 경우 로드되는 시간과 공간을 아낄 수 있습니다. 하지만 매번 라이브러리의 주소에 접근해야 하기 때문에 오버헤드가 존재해 수행 시간은 정적 라이브러리보다 느립니다.

자세한 내용은 아래 링크에서 확인할 수 있습니다.

[Computer Science/운영체제] - 동적/공유 라이브러리(Dynamic/ Shared Library)와 동적 링킹(Dynamic Linking)

 

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

작성중 동적/공유 라이브러리는 런타임에 링크/로드되는 라이브러리입니다. 공유 라이브러리와 동적 라이브러리는 같은 의미로, 차이는 특별히 나누지 않습니다. 다만 동적 라이브러리를 공유

ledpear.tistory.com

 

반응형
Comments