Я вроде новой для общей памяти и я искал рабочий пример, мне удалось найти только через 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:
Это также уменьшает количество акций соответствующей физической страницы
, который получил меня немного перепутали относительно того, что им на самом деле должны делать.
Что делает UnmapViewOfFile в точности? он только освобождает адрес или освобождает память? если бы на первом процессе я заполнил буфер, а затем его не отобрал, будут ли те же данные присутствовать во втором процессе, как только i MapViewOfFile? –
@igalk Он высвобождает адрес. Нет освобождения до тех пор, пока все процессы не исчезнут. Не знаю о вашем втором вопросе. –