Windows 上的隐式进程间共享内存?

Implicit interprocess shared memory on Windows?

我想做的是将内存的特定区域标记为在相同 image/binary 的进程之间自动共享,类似于 __declspec(allocate)... 和 __pragma(部分...)。

我知道我可以使用名称管道或等效物,但为此我想避免系统调用或额外的开销。我只是不确定是否有任何方法可以通知 NT 内核为图像的每个进程自动映射特定范围的页面。我没有在 MSDN 上找到任何东西,尽管 MSDN 不包括未记录的功能(根据定义),我可以使用它。

我也没有看到任何具体的 PE 部分 names/flags 可以表明这一点,尽管我可能遗漏了一些东西。

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