Ответ 1
ReadProcessMemory
не следует указывать в качестве метода IPC; да, он может использоваться как таковой, но он существует в основном для целей отладки (если вы проверяете его ссылку, он под категорией "Функции отладки" ), и он, безусловно, медленнее, чем "реальная" разделяемая память, поскольку он копирует память процесс в указанный буфер, в то время как в реальной общей памяти эти служебные данные отсутствуют.
Полный список методов IPC, поддерживаемых Windows, доступен в MSDN; все же, если у вас есть только два приложения, которые хотят разделить блок памяти, вы должны создать именованный файл с отображением памяти (подкрепленный файлом подкачки) с помощью CreateFileMapping
/MapViewOfFile
, который должен быть самым простым и быстрым методом, Подробности сопоставления файлов описаны на странице на MSDN.
соответствующие классы Boost IPC могут действовать как тонкая оболочка вокруг общей памяти, AFAIK только инкапсулирует вызовы соответствующим системным API, но в конце вы получаете обычный указатель на блок разделяемой памяти, поэтому работа должна быть такой же быстрой, как использование собственных API.
В связи с этим я советую вам использовать Boost.Interprocess, поскольку он переносимый, С++-friendly (он предоставляет семантику RAII) и не использует дают вам какое-либо снижение производительности после создания блока общей памяти (он может предоставлять дополнительные функции в общей памяти, но все они вступают в силу - если вы просто хотите, чтобы общая память получалась именно так).