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

问题描述 投票:1回答:1

我想要做的是将特定的内存区域标记为在同一图像/二进制的进程之间自动共享,类似于__declspec(allocate)...和__pragma(section ...)。

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

我也没有看到任何特定的PE部分名称/标志表明这种情况,尽管我可能遗漏了一些东西。

Ed:我注意到实际上有一个PE部分标志IMAGE_SCN_MEM_SHARED,但我需要调查它是如何工作的。

winapi visual-c++ process ipc nt
1个回答
1
投票

您可以使用#pragma comment(linker, "/SECTION:.shared,RWS")#pragma data_seg(".shared")在共享内存段中声明内容(仅适用于Visual Studio)。见Sharing Variables Between Win32 Executables

否则,如果这不是您的选择,则在进程之间共享内存的唯一其他方法是通过CreateFileMapping()MapViewOfFile/Ex()使用内存映射文件。见Creating Named Shared Memory

© www.soinside.com 2019 - 2024. All rights reserved.