【发布时间】:2011-10-30 22:22:22
【问题描述】:
Windows 7 上最快的进程间通信 (IPC) 方法是什么?我们只想共享一个内存块(双向)。
是ReadProcessMemory 还是别的什么?
我们想使用普通的C,但是,例如,Boost 库在 IPC 中使用什么?
【问题讨论】:
Windows 7 上最快的进程间通信 (IPC) 方法是什么?我们只想共享一个内存块(双向)。
是ReadProcessMemory 还是别的什么?
我们想使用普通的C,但是,例如,Boost 库在 IPC 中使用什么?
【问题讨论】:
ReadProcessMemory 甚至不应该被列为 IPC 方法;是的,它可以这样使用,但它主要用于调试目的(如果您检查它的引用,它在“调试功能”类别下),它肯定比“真实”共享内存慢,因为它副本 将进程的内存放到指定的缓冲区中,而真正的共享内存没有这个开销。
Windows 支持的 IPC 方法的完整列表可见on the MSDN;尽管如此,如果你只有两个应用程序想要共享一个内存块,你应该创建一个命名的内存映射文件(由页面文件支持)CreateFileMapping/MapViewOfFile,这应该是最直接和最快的方法.文件映射的细节在 MSDN 上的its page 有描述。
relevant Boost IPC classes 可以充当共享内存的瘦包装器,AFAIK 它只封装了对相关系统特定 API 的调用,但最终你会得到指向共享内存块的通常指针,所以操作应该是与使用原生 API 一样快。
因此,我建议您使用Boost.Interprocess,因为它是可移植的、C++ 友好的(它提供 RAII 语义)并且在创建共享内存块后不会给您带来任何性能损失(它可以 在共享内存上提供额外的功能,但它们都是可选的 - 如果你只想要共享内存,你就可以得到它)。
【讨论】: