私は共有メモリが初めてで、実際の例を探していました.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);
そして2番目のプロセスで:
HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_READ, FALSE, strContentsSizeFileMap.c_str());
LPVOID pData = ::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
mapView の作業が完了したら、' UnmapViewOfFile()
' を使用して解放する必要があることはわかっています。私の質問は、正確にはどこですか?
- 親プロセス?
- 子プロセス
- 両方?
両方にある場合、OS は完全に解放される前にアドレスの参照カウントを保持しますか?
MSDN から:
また、対応する物理ページの共有数を減らします
これにより、実際に何をすべきかについて少し混乱しました。