라이브러리는 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴이나 함수들의 집합 파일을 말하며 함께 링크될 수 있도록 미리 컴파일된 형태인 오브젝트 코드 형태로 존재한다. 라이브러리들은 사용자의 프로그램과 링크되어 실행이 가능한 완전한 프로그램을 이룬다.
(1) 정적(static) 라이브러리
- 정적 라이브러리를 사용하여 컴파일 하게 되면 링커가 프로그램이 필요로 하는 부분을 라이브러리에서 찾아 실행파일에 바로 복사한다.
- 실행파일에 전부 들어가기 때문에 실행할 때 라이브러리가 필요 없다.
- 크기가 커지면서 같은 코드를 가진 여러 프로그램을 실행할 경우 코드가 중복되어 메모리를 낭비 할 수 있다.
(2) 공유(shared) 라이브러리
- 공유 라이브러리를 사용하여 컴파일 하게되면 링커가 실행파일에다가 단지 링크(실행될때 라이브러리를 호출)를 걸어두고 실행 시 라이브러리에 있는 컴파일된 코드를 가져온다.
- 정적 라이브러리를 사용하는 것보다 파일 크기가 훨씬 작아지고, 프로그램들과 공유가 가능해지면서 메모리가 적게 차지하며, 사용 후 메모리에서 삭제된다.
- 공유라이브러리 작동 주 원리는 Procedure Linkage Table(PLT)라는 프로그램으로 호출하는 모든 함수를 나열하는 프로그램의 테이블이고, 프로그램이 시작되면 PLT는 함수를 로딩했던 주소에 대한 런타임 링커를 쿼리하여 그곳으로 옮겨간다.
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 기술