라이브러리 데이터 Dynamic-Link
DLL(Dynamic-Link 라이브러리)에는 전역 데이터 또는 로컬 데이터가 포함될 수 있습니다.
변수 범위
DLL 소스 코드 파일에서 전역으로 선언된 변수는 컴파일러 및 링커에서 전역 변수로 처리되지만 지정된 DLL을 로드하는 각 프로세스는 해당 DLL의 전역 변수에 대한 자체 복사본을 가져옵니다. 정적 변수의 scope 정적 변수가 선언되는 블록으로 제한됩니다. 따라서 각 프로세스에는 기본적으로 DLL 전역 및 정적 변수의 자체 instance 있습니다.
참고
개발 도구를 사용하면 기본 동작을 재정의할 수 있습니다. 예를 들어 Visual C++ 컴파일러는 #pragma 섹션 을 지원하고 링커는 /SECTION 옵션을 지원합니다. 자세한 내용은 개발 도구에 포함된 설명서를 참조하세요.
동적 메모리 할당
DLL이 메모리 할당 함수(GlobalAlloc, LocalAlloc, HeapAlloc 및 VirtualAlloc)를 사용하여 메모리를 할당하는 경우 메모리는 호출 프로세스의 가상 주소 공간에 할당되며 해당 프로세스의 스레드에서만 액세스할 수 있습니다.
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(스레드) 대신 스레드 로컬 스토리지 함수를 사용해야 합니다.