inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

동적 라이브러리 개발

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

해결된 질문

1135

고대괴물

작성한 질문수 3

1

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

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

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

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

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

c

답변 1

3

널널한 개발자

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

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

참고하시기 바랍니다.

질문이 있습니다(강의와 거의 상관이 없는)

0

73

2

컴파일러 서적 질문입니다

0

158

1

코드생성 및 최적화 질문입니다

0

156

1

Hex Editor를 이용한 다국어 번역 관련 질문입니다

0

207

2

큐의 배열을 넘겨도 정상작동합니다

0

155

2

캐너리비트에 관하여 질문

0

208

3

상수화된 문자열에 질문있습니다

0

169

1

함수 호출 매개변수 전달에 대한 질문 드립니다.

0

187

1

단항 증감 연산에 따른 다른 접근에 대한 질문있습니다.

0

204

2

함수호출 규약 종류에 따른 장단점 여부

0

224

2

정적라이브러리 링크 오류

0

223

1

const char *를 char*에 초기화할때의 컴파일 에러 처리 방식 문의

0

349

2

pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.

0

249

2

비선형 자료구조

0

308

1

자료 구조 공부 후에

0

350

1

강의자료 관련

0

251

1

마지막에 말씀하신 부분 질문드립니다.

0

210

1

문자열 관련 질문 드립니다

0

286

1

라이브러리

0

270

1

부동소수점

0

388

1

왜 변수 주소 사이에 offset이 있는 건가요?

0

298

2

stack 쌓는 순서

0

503

1

함수호출이랑 쓰레드

0

408

1

리눅스 환경도 스레드 생성 원리는 동일한건가요?

0

526

1