다음을 통해 공유


라이브러리 데이터 Dynamic-Link

DLL(Dynamic-Link 라이브러리)에는 전역 데이터 또는 로컬 데이터가 포함될 수 있습니다.

변수 범위

DLL 소스 코드 파일에서 전역으로 선언된 변수는 컴파일러 및 링커에서 전역 변수로 처리되지만 지정된 DLL을 로드하는 각 프로세스는 해당 DLL의 전역 변수에 대한 자체 복사본을 가져옵니다. 정적 변수의 scope 정적 변수가 선언되는 블록으로 제한됩니다. 따라서 각 프로세스에는 기본적으로 DLL 전역 및 정적 변수의 자체 instance 있습니다.

참고

개발 도구를 사용하면 기본 동작을 재정의할 수 있습니다. 예를 들어 Visual C++ 컴파일러는 #pragma 섹션 을 지원하고 링커는 /SECTION 옵션을 지원합니다. 자세한 내용은 개발 도구에 포함된 설명서를 참조하세요.

 

동적 메모리 할당

DLL이 메모리 할당 함수(GlobalAlloc, LocalAlloc, HeapAllocVirtualAlloc)를 사용하여 메모리를 할당하는 경우 메모리는 호출 프로세스의 가상 주소 공간에 할당되며 해당 프로세스의 스레드에서만 액세스할 수 있습니다.

DLL은 파일 매핑을 사용하여 프로세스 간에 공유할 수 있는 메모리를 할당할 수 있습니다. 파일 매핑을 사용하여 명명된 공유 메모리를 만드는 방법에 대한 일반적인 설명은 파일 매핑을 참조하세요. DllMain 함수를 사용하여 파일 매핑을 사용하여 공유 메모리를 설정하는 예제는 Dynamic-Link 라이브러리에서 공유 메모리 사용을 참조하세요.

스레드 로컬 스토리지

TLS(스레드 로컬 스토리지) 함수를 사용하면 DLL이 다중 스레드 프로세스의 각 스레드에 대해 다른 값을 저장하고 검색하기 위해 인덱스를 할당할 수 있습니다. 예를 들어 스프레드시트 애플리케이션은 사용자가 새 스프레드시트를 열 때마다 동일한 스레드의 새 instance 만들 수 있습니다. 다양한 스프레드시트 작업에 대한 함수를 제공하는 DLL은 TLS를 사용하여 각 스프레드시트의 현재 상태(행, 열 등)에 대한 정보를 저장할 수 있습니다. 스레드 로컬 스토리지에 대한 일반적인 설명은 스레드 로컬 스토리지를 참조하세요. DllMain 함수를 사용하여 스레드 로컬 스토리지를 설정하는 예제는 Dynamic-Link 라이브러리에서 스레드 로컬 스토리지 사용을 참조하세요.

Windows Server 2003 및 Windows XP: Visual C++ 컴파일러는 스레드 지역 변수인 _declspec(스레드)를 선언할 수 있는 구문을 지원합니다. DLL에서 이 구문을 사용하는 경우 Windows Vista 이전 버전의 Windows에서 LoadLibrary 또는 LoadLibraryEx를 사용하여 DLL을 명시적으로 로드 할 수 없습니다. DLL이 명시적으로 로드되는 경우 _declspec(스레드) 대신 스레드 로컬 스토리지 함수를 사용해야 합니다.