Неявная межпроцессная общая память в Windows? - PullRequest
0 голосов
/ 13 сентября 2018

То, что я хотел бы сделать, это пометить определенную область памяти как автоматически разделяемую между процессами одного и того же изображения / двоичного файла, подобно __declspec (allocate) ... и __pragma (section ...).

Я знаю, что могу использовать каналы имен или аналогичные, но для этой цели я бы хотел избежать системных вызовов или дополнительных накладных расходов. Я просто не уверен, есть ли какой-либо способ сообщить ядру NT, чтобы автоматически отображать определенный диапазон страниц для каждого процесса изображения. На MSDN я ничего не нашел, хотя MSDN не включает недокументированных функционально (по определению), что мне вполне подходит.

Я также не вижу каких-либо конкретных имен / флагов раздела PE, которые бы указывали на это, хотя возможно, что я что-то упустил.

Ред .: Я заметил, что на самом деле существует флаг секции PE IMAGE_SCN_MEM_SHARED, хотя мне нужно выяснить, как он работает.

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете использовать #pragma comment(linker, "/SECTION:.shared,RWS") и #pragma data_seg(".shared") для объявления вещей в сегменте общей памяти (работает только в Visual Studio).См. Совместное использование переменных между исполняемыми файлами Win32 .

В противном случае, если это не вариант для вас, единственным другим способом разделения памяти между процессами является использование файла с отображением в памяти через CreateFileMapping()и MapViewOfFile/Ex().См. Создание именованной общей памяти .

...