1. 동적 라이브러리는 '공유 라이브러리'라고도 불리며, 정적 라이브러리의 문제를 해결하기 위해 만들어졌다. 프로그램이 동적 라이브러리와 링크되면, 라이브러리 모듈이 실행 파일로 복사되는 대신 동적 라이브러리가 필요하다는 정보만 기록하여 둔다. 이후 실행 파일이 실제로 실행되어 메모리로 올라가면 동적 라이브러리를 참조하여 필요한 정보를 메모리에 올리게 된다. 이후 다른 프로그램이 실행되며 같은 라이브러리 함수를 참고하고자 하면, 이미 메모리에 존재하는 동적 라이브러리를 참고하여 바로 링크 작업을 하게 된다.
2. 특정 CPU나 운영체제를 위해 최적화된 동적 라이브러리를 사용할 수 있다.
3. dynamic linking은 별다른 옵션을 주지 않으면 운영체제에서 해주며(기본 옵션이 dynamic linking), window에서는 dll, linux와 unix에서는 .so또는 .sa확장자를 사용한다.
4. static linking은 실행파일을 만들 때 라이브러리를 같이 포함시켜서 실행 파일을 만드는 것을 의미한다. static linking은 미리 컴파일 되어 있기 때문에 컴파일 시간도 단축되고, 기술 유출 방지 목적으로 사용할 수도 있다. 다만, 실행 파일 내에 라이브러리 코드가 저장되기 때문에 메모리를 어마어마하게 잡아먹는다.
5-1. 함수의 시그니처는 컴파일러가 함수를 구분하기 위한 구성요소를 말한다. 프로그래밍 언어마다 시그니처를 구성하는 요소가 다르지만 대채적으로 아래의 요소가 포함되어 있다.
- 함수의 이름
- 매개변수의 개수
- (옵셔널)매개변수의 자료형
- (옵셔널) 반환하는 값의 자료형
5-2. 공유라이브러리는 심볼(함수, 변수)들을 프로그램이 시작하기 전에 로드하며, 메모리와 용량 절약, 업데이트에 대한 융통성을 가지지만 사용자로부터 접근하기 쉽도록 짜여 있어 보안에 문제가 발생한다.
참조
---
https://www.wisewiredbooks.com/term-dict/programming-language/function-signiture.html
'프로그래밍 > C++' 카테고리의 다른 글
[C++] Const 상수 (포인터 상수, constexpr, const_cast) (0) | 2023.07.23 |
---|