인프런 커뮤니티 질문&답변

고대괴물님의 프로필 이미지
고대괴물

작성한 질문수

독하게 되새기는 C 프로그래밍

동적 라이브러리 개발

dll의 메모리 구조는 어떻게 되나요?

해결된 질문

작성

·

958

1

 안녕하세요 수업 잘 듣고 있습니다. 양질의 수업 감사합니다.

수업 내용중 dll에 관해 질문이 있습니다.

lib형태의 라이브러리는 실행파일에 같이 묶이기 때문에 실행파일의 메모리구조(힙,스텍,데이터등)를 참조할 것이라 생각합니다.

dll의 경우 하나의 라이브러리를 여러 프로세스에서 가져와서 사용하는 형태인데 이경우 각 프로세스 마다 dll을 위한 메모리가 할당되는것인지 아니면 dll을 위한 메모리 공간이 할당되고 그것을 공유해서 사용하게 되는것인지 궁금합니다.

(혹 잘못 이해하고 있으면 지도 부탁드립니다.)

답변 1

3

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

DLL은 Lib와 달리 동적으로 로딩한다는 것만 다르고 나머지는 같다고 보면 됩니다. 즉, DLL에서 사용하는 모든 변수들의 메모리는 DLL을 로드한 Process의 메모리 공간을 사용합니다. 예를 들어 int g_nData; 같은 전역변수가 DLL에서 선언되고 사용되고 있다면 이 DLL를 로드한 Procsss A, B는 각각 다른 g_nData 값을 가질 수 있습니다. 메모리가 서로 다르니까요.

다만 DLL라이브러리 실행코드가 저장되는 메모리는 로드한 프로세스 개수가 아무리 여러 개라 하더라도 한 곳 입니다. 다만 가상 메모리 시스템을 사용하고 ASLR(Address Space Layout Randomization)이 적용되어 각 프로세스 마다 주소가 다르게 보일 수는 있습니다. 그러나 그것은 그렇게 보일 뿐 실제로는 한 위치에 저장되어 있습니다.

참고하시기 바랍니다.

고대괴물님의 프로필 이미지
고대괴물

작성한 질문수

질문하기