我对共享内存有点陌生,我正在寻找一个工作示例,我只能通过MSDN找到
在第一个进程中,我将共享内存声明如下:
hFileMapping = ::CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, dwDataSize, strSharedMemoryName.c_str());
pBuffer = ::MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, dwDataSize);
::CopyMemory(pBuffer, pData, dwDataSize);
在第二个过程中:
HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_READ, FALSE, strContentsSizeFileMap.c_str());
LPVOID pData = ::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
我知道一旦我完成了 mapView 的工作,我需要使用“ UnmapViewOfFile()
”来释放它。我的问题是具体在哪里?
- 父进程?
- 子进程
- 两个都?
如果两者都存在,操作系统是否会在地址完全释放之前保留一些引用计数?
来自 MSDN:
它还会减少相应物理页面的共享计数
这让我对我实际上应该做什么有点困惑。