본문 바로가기

공부/tcp/ip 프로그래밍

정적 라이브러리와 동적라이브러리 차이

반응형

정적 라이브러리(*.lib)란 말 그대로 동적이 아닌 정적으로 프로세스에 붙는 라이브러리입니다. 여기서 라이브러리란 printf와 같은 자주 쓰는 함수들의 정의들이 들어가 있는 파일입니다.

 

DLL은 동적 라이브러리, 동적 연결 라이브러리라고도 합니다. (Dynamic Link Library) 정적 라이브러리와 DLL의 차이는 라이브러리라는 측면에서는 동일하지만 정적 라이브러리는 정적이고, DLL은 동적이라고 할 수 있습니다. 즉 정적 라이브러리는 컴파일 할 때 실행파일에 존속되지만, DLL은 필요할 때 가져다 쓸 수 있어 메모리적인 측면에서 효율적이라고 볼 수 있습니다.

 

런타임 라이브러리는 동적 라이브러리, 공유 라이브러리 등으로 불려지는것 같습니다.

런타임 라이브러이의 가장 대표적인 것이 바로 standard C library 입니다.

런타임 함수의 가장 대표적인 것은 printf 가 되겠네요^^.

런타임 라이브러리의 특징은 님이 작성한 프로그램이 동작하면 같이 메모리에 올라간다는

것입니다.

런타임 라이브러리를 이용하는 이유는 크게 2가지만 열가해 보겠습니다.

첫째.. 실행 화일의 크기를 대폭적으로 줄인다.

님이 호출한 printf 와 같은 함수는 님의 최종 실행화일에 들어가 있지 않습니다.

님이 작성한 실행화일에는 C 라이브러리가 필요하며.. printf 를 호출하고 싶다라는

정보가 들어가 있을 뿐입니다.

실제로 프로그램이 메모리에 올라갈때(loading).. 로더(loader)에서 필요한 라이브러리

찾아서 같이 메모리에 올려줘서.. printf 함수 같은것을 호출할때 같이 올라간

라이브러리의 printf 위치를 찾아가서 실행하는 것입니다.

둘째.. 복수개의 프로그램이 돌더라도 런타임 라이브러리 하나만 올라가면 됩니다.

100 개의 printf 를 사용하는 프로그램이 돌더라도 오직 하나의 standard C library 만

메모리에 로딩되면 됩니다.

메모리를 효율적으로 사용할 수 있게 되겠네요.

그 외에도 다양한 장점이 존재합니다 ^^.

보통 Windows 에서는 DLL 확장자를 가지는 화일이 런타임 라이브러리 이며...

Linux, Unix 에서는 so (shared object) 확장자를 가지는 화일이 런타임 라이브러리 입니다.

런타임 라이브러는 C, C++ 를 굳이 가리지는 않습니다.

동작이 같기 때문이죠 ^^.

반응형