Область выделенной памяти
Весь процесс выделяется с помощью функций выделения памяти (HeapAlloc, VirtualAlloc, GlobalAllocили LocalAlloc) доступен только для процесса. Однако память, выделенная библиотекой DLL, выделяется в адресном пространстве процесса, который вызывает библиотеку DLL и недоступен другим процессам, использующим ту же библиотеку DLL. Чтобы создать общую память, необходимо использовать сопоставление файлов.
Именованное сопоставление файлов обеспечивает простой способ создания блока общей памяти. Процесс может указать имя при использовании функции createFileMappingдля создания объекта сопоставления файлов. Другие процессы могут указать то же имя CreateFileMapping или функцию OpenFileMapping, чтобы получить дескриптор объекта сопоставления.
Каждый процесс задает его дескриптор объекту сопоставления файлов в функции MapViewOfFile, чтобы сопоставить представление файла с собственным адресным пространством. Представления всех процессов для одного объекта сопоставления файлов сопоставляются с теми же шарабельными страницами физического хранилища. Однако виртуальные адреса сопоставленных представлений могут отличаться от одного процесса до другого, если для сопоставления представления по указанному адресу не используется функция mapViewOfFileEx. Хотя это возможно, страницы физического хранилища, используемого для сопоставленного представления файлов, не являются глобальными; Они недоступны для процессов, которые не сопоставлены с представлением файла.
Все страницы, зафиксированные путем сопоставления представления файла, освобождаются, когда последний процесс с представлением объекта сопоставления завершается или не сопоставляет его представление путем вызова функции UnmapViewOfFile. В настоящее время обновляется указанный файл (при наличии), связанный с объектом сопоставления. Указанный файл также можно принудительно обновить, вызвав функцию FlushViewOfFile.
Дополнительные сведения см. в сопоставления файлов. Пример общей памяти в библиотеке DLL см. в разделе Использование общей памяти в библиотеке Dynamic-Link.
Если в нескольких процессах есть доступ на запись к общей памяти, необходимо синхронизировать доступ к памяти. Дополнительные сведения см. в синхронизации.