2023. 5. 15. 03:11ㆍ도와줘/컴퓨터
참고로 Main 함수가 있는 프로그램에 link되는 시점에 따라서
동적 링크는 dll로, 정적 링크는 lib로 구분된다.
하지만 dll도 결국 라이브러리 파일일 뿐이다.
이름부터 대놓고 Dynamic Link Library로서 라이브러리 자체에 대한 특징을 가지고 있는 건 아니고 static link library와 비교하는 것이 오히려 낫다.
스태틱 링크의 경우, 컴파일 시점에, 링커에 의해서 라이브러리가 연결되어서, 실행 파일의 일부분이 된다.
반면 동적 링크의 경우, 컴파일 시점에는 라이브러리가 실행 파일의 일부분이 되지 않는다. 즉 함수가 직접 복사되는 건 아니고, 함수의 위치정보만 가지고 그 함수를 호출할 수 있게 된다. 실행 파일에서 해당 라이브러리의 기능을 사용할 때에만, 라이브러리 파일을 참조하여 기능을 호출하는 것이다.
장점은?
일단 당연하게도 필요할 때에만 라이브러리를 호출하기 때문에, 실행 파일에 모든 함수가 복사되는 것이 아니므로, 디스크 용량을 적게 차지하게 된다.
그리고 한 번의 dll 작성으로 여러 프로그램에서 이를 돌려쓸 수 있기 때문에 생산성이 높아진다.
모듈화가 가능해졌기에, 수정 발생 시 dll만 변경하면 되고 Main 함수를 가진 프로그램은 재컴파일을 필요로 하지 않는다.
리소스 교체가 용이해진다.
실행파일과 라이브러리 파일이 분리되어 디버깅이 편하다. -> 이건 사실 실제 개발자의 입장에서는 생각해볼 문제다
Windows에서 dll이 관리되는 방법?
간단한 시나리오를 생각해보면, Main 함수를 가진 클라이언트 프로그램 A.exe, B.exe가 있고 해당 프로그램들이 필요로 하는 camera.dll이 있다고 해보자.
A.exe를 실행하면, camera.dll이 메모리에 로드된다. 그럼 camera.dll은 자신을 로드한 프로세스의 가상 주소 공간에 매핑되면서, 프로세스와 메모리/스택/핸들을 공유하게 된다.
B.exe를 실행하게 되면, 이미 camera.dll이 메모리에 로드되어 있으므로 추가적으로 로드하는 과정은 없다. 다만 코드는 로드되지 않지만, dll이 갖는 고유 변수는 클라이언트 프로그램이 새롭게 실행될 때마다 메모리를 할당받아 공간을 차지한다. 개발자가 A.exe, B.exe라는 각기 다른 클라이언트 프로그램들이, 각 프로그램에 기대되는 고유한 동작을 할 수 있도록 해준다.(클래스, 인스턴스를 dll, 클라이언트 프로그램에 각각 비유할 수 있겠다.)
대신에 B.exe의 주소 영역에는 camera.dll이 로드된 메모리를 매핑시켜준다. 그 결과 B.exe 또한 A.exe와 같이 camera.dll의 함수를 자유롭게 이용할 수 있게 된다.
명시적 연결과 암시적 연결 간단한 요약
https://tedock.tistory.com/331
DLL 파일이란?
■ 라이브러리라이브러리(Library)란 함수,데이터,타입 등 여러가지 프로그래밍 요소들의 집합이며 보통 LIB확장자를 가진다. (DLL사용시 h,dll파일 필요) 자주 사용되는 표준적인 함수를 매번 직접
tedock.tistory.com
성능과도 상관 있는, 재미있는 부분이다.
여기서 조금 더 자세한 설명을 얻을 수 있다.
이름만 들으면 런타임 동적 연결이 더 느릴 것 같은데
대신에 '초기 시작 성능' 관련해서 개선할 수 있는 점이 보인다.
https://learn.microsoft.com/ko-kr/troubleshoot/windows-client/deployment/dynamic-link-library
DLL(동적 연결 라이브러리) - Windows Client
DLL 및 DLL 사용 시 발생하는 여러 가지 문제에 대해 설명합니다.
learn.microsoft.com
아주 간략한, C#에서의 DLL 동적 로드
[.NET] DLL을 동적으로 로드하기
일반적으로 'DLL'은 개발단계에서 참조를 통해 연결하여 사용합니다. 하지만 여러 가지 상황에 따라서 동적 로드를 해야 하는 경우가 있죠. 대표적인 경우가 국가나 언어, 운영체제 등에 따라 다
blog.danggun.net
'도와줘 > 컴퓨터' 카테고리의 다른 글
.db 파일 읽는 법, 데이터베이스를 쉽게 보는 방법?! (0) | 2023.05.30 |
---|---|
리눅스 파일 시스템(Linux file system structure) 디렉터리 구 (1) | 2023.05.17 |
유튜브 멤버십, 프리미엄과 인앱 구독 등.. 구글 결제센터에서 한번에 확인 (0) | 2023.05.10 |
PC에서 스크롤 캡처하기(크롬 스크롤 캡처, 크롬 전체 캡처) (0) | 2023.05.08 |
크롬 저장된 비밀번호 삭제하기... 친구 집에서 로그인했다면 꼭 지우고 가 (0) | 2023.05.04 |