할당된 메모리 범위
메모리 할당 함수(HeapAlloc, VirtualAlloc, GlobalAlloc 또는 LocalAlloc)를 사용하여 프로세스가 할당하는 모든 메모리는 프로세스에서만 액세스할 수 있습니다. 그러나 DLL에 의해 할당된 메모리는 DLL을 호출한 프로세스의 주소 공간에 할당되며 동일한 DLL을 사용하는 다른 프로세스에서는 액세스할 수 없습니다. 공유 메모리를 만들려면 파일 매핑을 사용해야 합니다.
명명된 파일 매핑은 공유 메모리 블록을 쉽게 만들 수 있는 방법을 제공합니다. 프로세스는 CreateFileMapping 함수를 사용하여 파일 매핑 개체를 만들 때 이름을 지정할 수 있습니다. 다른 프로세스에서는 CreateFileMapping 또는 OpenFileMapping 함수에 동일한 이름을 지정하여 매핑 개체에 대한 핸들을 가져올 수 있습니다.
각 프로세스는 MapViewOfFile 함수의 파일 매핑 개체에 대한 핸들을 지정하여 파일 보기를 자체 주소 공간에 매핑합니다. 단일 파일 매핑 개체에 대한 모든 프로세스의 보기는 실제 스토리지의 동일한 공유 가능한 페이지에 매핑됩니다. 그러나 MapViewOfFileEx 함수를 사용하여 뷰를 지정된 주소에 매핑하지 않는 한 매핑된 뷰의 가상 주소는 프로세스마다 다를 수 있습니다. 공유 가능하지만 매핑된 파일 보기에 사용되는 물리적 스토리지의 페이지는 전역이 아닙니다. 파일 보기를 매핑하지 않은 프로세스에는 액세스할 수 없습니다.
파일 보기를 매핑하여 커밋된 모든 페이지는 매핑 개체의 뷰가 있는 마지막 프로세스가 UnmapViewOfFile 함수를 호출하여 뷰를 종료하거나 매핑 해제할 때 해제됩니다. 현재 매핑 개체와 연결된 지정된 파일(있는 경우)이 업데이트됩니다. FlushViewOfFile 함수를 호출하여 지정된 파일을 강제로 업데이트할 수도 있습니다.
자세한 내용은 파일 매핑을 참조하세요. DLL의 공유 메모리 예제는 Dynamic-Link 라이브러리에서 공유 메모리 사용을 참조하세요.
여러 프로세스에서 공유 메모리에 대한 쓰기 권한이 있는 경우 메모리에 대한 액세스를 동기화해야 합니다. 자세한 내용은 동기화를 참조 하세요.