정적(static)&공유(shared) 라이브러리

라이브러리는 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴이나 함수들의 집합 파일을 말하며 함께 링크될 수 있도록 미리 컴파일된 형태인 오브젝트 코드 형태로 존재한다. 라이브러리들은 사용자의 프로그램과 링크되어 실행이 가능한 완전한 프로그램을 이룬다.

 

(1) 정적(static) 라이브러리

- 정적 라이브러리를 사용하여 컴파일 하게 되면 링커가 프로그램이 필요로 하는 부분을 라이브러리에서 찾아 실행파일에 바로 복사한다.

- 실행파일에 전부 들어가기 때문에 실행할 때 라이브러리가 필요 없다.

- 크기가 커지면서 같은 코드를 가진 여러 프로그램을 실행할 경우 코드가 중복되어 메모리를 낭비 할 수 있다.

 

(2) 공유(shared) 라이브러리

- 공유 라이브러리를 사용하여 컴파일 하게되면 링커가 실행파일에다가 단지 링크(실행될때 라이브러리를 호출)를 걸어두고 실행 시 라이브러리에 있는 컴파일된 코드를 가져온다.

- 정적 라이브러리를 사용하는 것보다 파일 크기가 훨씬 작아지고, 프로그램들과 공유가 가능해지면서 메모리가 적게 차지하며, 사용 후 메모리에서 삭제된다.

- 공유라이브러리 작동 주 원리는 Procedure Linkage Table(PLT)라는 프로그램으로 호출하는 모든 함수를 나열하는 프로그램의 테이블이고, 프로그램이 시작되면 PLT는 함수를 로딩했던 주소에 대한 런타임 링커를 쿼리하여 그곳으로 옮겨간다.

'프로그래밍 > C & C++' 카테고리의 다른 글

Smart Pointer  (0) 2020.04.22
Virtual Function  (0) 2020.04.21
Dangling Pointer(허상 포인터)  (0) 2020.04.17
Vector 컨테이너  (0) 2020.04.09
STL Vector와 List의 차이점  (0) 2020.03.25
더보기

댓글,

야미야미얌얌

프로그래밍 및 IT 기술