我想要做的是将特定的内存区域标记为在同一图像/二进制的进程之间自动共享,类似于__declspec(allocate)...和__pragma(section ...)。
我知道我可以使用名称管道或等效的,但为此我想避免系统调用或额外的开销。我只是不确定是否有任何方法可以通知NT内核为图像的每个进程自动映射特定范围的页面。我没有在MSDN上找到任何东西,虽然MSDN没有包含无证件的功能(按照定义),我可以使用它。
我也没有看到任何特定的PE部分名称/标志表明这种情况,尽管我可能遗漏了一些东西。
Ed:我注意到实际上有一个PE部分标志IMAGE_SCN_MEM_SHARED,但我需要调查它是如何工作的。
您可以使用#pragma comment(linker, "/SECTION:.shared,RWS")
和#pragma data_seg(".shared")
在共享内存段中声明内容(仅适用于Visual Studio)。见Sharing Variables Between Win32 Executables。
否则,如果这不是您的选择,则在进程之间共享内存的唯一其他方法是通过CreateFileMapping()
和MapViewOfFile/Ex()
使用内存映射文件。见Creating Named Shared Memory。