일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- C#
- 홍대 방탈출
- PC VR
- 방탈출 추천
- 2021 방탈출 추천
- 개발
- 넥스트에디션
- C++ 자료구조
- 홍대 방탈출 추천
- 홍대 덤앤더머
- 강남 방탈출
- 방탈출 리뷰
- 추천
- 후기
- 이스케이퍼스
- 넥스트에디션 2호점
- 꽃길
- C 자료구조
- 공포 방탈출
- 필활
- 홍대
- 이스케이퍼스 2호점
- 방탈출 후기
- 시스템 프로그래밍
- Android
- 정렬 알고리즘
- 윈도우 프로그래밍
- 유니티
- 방탈출
- Unity
- Today
- Total
행복한 연어의 이야기
(윈도우 시스템) 21. Dynamic Linking Library(DLL) 본문
1. 라이브러리
printf 함수를 찾아보면 선언만 되어 있고(stdio.h) 정의는 찾을 수 없다.
이는 라이브러리에 있기 때문인데 printf 말고도 수 많음 함수들이 라이브러리에 있는 것을 확인 할 수 있다.
이렇게 기본적으로 제공되는 라이브러리 외에도 우리가 직접 라이브러리를 만들 수도 있다.
정적라이브러리와 동적라이브러리
정적라이브러리는 라이브러리 코드를 완전히 포함해서 실행파일을 만든다.
즉 실행파일이 처음 만들어질때 하나로 묶이는 형태의 라이브러리를 말한다.
실행파일만 있으면 실행가능 하다는 장점이 있지만
같은 라이브러리를 사용하는 프로그램 3개가 있으면 3개의 라이브러리 모두 용량을 차지한다는 단점이 있다.
동적라이브러리(DLL) 는 정적라이브러리와 반대되는 개념이다.
실행파일 안에 라이브러리가 포함되지 않아 따로 연결해주어야 하지만
하나의 라이브러리를 공유해서 사용하기 때문에 비교적 실행파일의 용량이 적게 들어간다는 장점이 있다.
동적 라이브러리의 장점은 더 있는데 메모리 관련 측면에서 더 두드러진다.
프로그램을 1개만 실행할떄는 차이가 없지만
동일한 라이브러리를 사용하는 프로그램 2개를 실행시킨다면
정적라이브러리는 라이브러리를 물리메모리에 할당하고 교체가 일어나지만
동적라이브러리는 페이지 단위로 메모리 공유가 일어나 둘다 필요로 하는 페이지에 대해서는
교체 작업이 일어나지 않는다. (새로 메모리를 할당하지 않는다. - 새로 할당하는 경우가 있는데 아래 서술한다.)
(동적라이브러리도 다른 페이지를 요구한다면 당연히 교체가 일어난다.)
DLL 은 메모리에 올라가면 공유하는 (메모리에 올라간 DLL을 공유하는) 프로세스가
모두 종료할때까지 메모리에 존재한다.
여기서 메모리가 어떤 메모리 일지 생각해보자.
메모리가 가상메모리를 의미하는가??
프로세스 A의 매핑된 DLL은 프로세스 A가 소멸하면 같이 소멸된다.
즉 가상메모리를 의미하는 것은 아니다.
메모리가 메인 메모리(RAM)를 의미하는가??
위에서 설명했듯이 페이지 단위의 교체는 발생한다.
즉 메인 메모리에 끝까지 남아 있을 수 있는 페이지는 존재하지 않는다.
메모리가 물리 메모리를 의미하는가?
우선 물리메모리를 의미하는 것이 정답이다. (물론 RAM 도 물리메모리의 일종이다.)
DLL 을 필요로 하는 프로세스 A 가 실행되었을때 DLL은 가상메모리 영역에 매핑되면서
메모리에 올라간다.(물리 메모리에 할당된다.)
그리고 동일한 DLL을 요구하는 프로세스 B 가 실행될때 메모리를 새로 메모리를 올리는게(할당하는게) 아니라
이미 올라와 있는 DLL 을 프로세스 B 가상메모리 영역에 매핑한다.
여기서 A B 모두 동일한 주소에 DLL을 매핑하기 때문에 페이지 단위로 공유가 가능하다.
즉 한번 올라간 DLL은 둘 이상의 프로세스가 각각 자신의 가상메모리에 매핑해서 공유하는 구조를 가지기 때문에
메모리 사용에 대한 효율성이 좋다.
DLL이 할당되어야할 가상메모리 주소를 동일하게 매핑했기 때문에 새로 물리메모리에 올리지 않는다고 설명했다.
만약 프로세스 A B 가 DLL을 다른 가상메모리 주소로 매핑했다면 물리메모리에 2번 이상 올라 갈 수 있다.
처음 DLL 이 빌드될때 DLL 이 할당되어야 할 가상 메모리 주소는 링커에 의해 결정된다.
프로세스 A 에 할당한 C DLL 주소에 프로세스 B도 C DLL 을 할당하려는데
이미 C DLL 주소에 D DLL 이 있다면 프로세스 B 의 D DLL은 다른 가상메모리 주소로 매핑이 되고
이 경우 새롭게 물리 메모리를 할당한다.
알고 넘어가야할 것
1. 정적라이브러리와 동적라이브러리(DLL)
2. 정적라이브러이의 특성
3. 동적라이브러리의 특징
'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.
'IT > 윈도우 시스템 프로그래밍' 카테고리의 다른 글
(윈도우 시스템) 20. 메모리 관리 (0) | 2021.08.30 |
---|---|
(윈도우 시스템) 19. 비동기 I/O와 APC (0) | 2021.08.27 |
(윈도우 시스템) 18. 파일 I/O와 디렉터리 컨트롤 (0) | 2021.08.25 |
(윈도우 시스템) 17. 구조적 예외처리(SEH) 기법 (0) | 2021.08.23 |
(윈도우 시스템) 16. 컴퓨터 구조 네번째 (0) | 2021.08.20 |