最快的IN PROCESS技术在win32 / C / C ++中共享内存和IPC

我正在写一个实时库,导出一个标准化的接口(VST),并由外部应用程序托pipe。

这个库必须发布一个表,这个表可以被同一进程中的任何线程看到(如果它知道在哪里看的话) – 要清楚的是,这个表必须能够被进程空间中的所有dll所查看 – 如果他们知道在哪里查找的话。

访问表格必须快速。 虚拟内存似乎是矫枉过正,我已经考虑使用窗口句柄(我仍然可以)消息泵,但我更喜欢更快的方法,如果有可用的。

另外,PE中的共享数据段是我想尽可能避免的。 我想我宁愿用一个窗户把手。

我现在不担心同步,事后我可以处理。 我只想提出一些最快技术的build议,以便在stream程空间内发布表格。

你似乎很困惑。 同一进程中的所有线程共享相同的地址空间,所以不需要任何形式的IPC:如果一个线程知道表的地址,就可以访问它。

使用CreateFileMapping并传入INVALID_FILE_HANDLE作为文件句柄。 这将创建一个命名的共享内存页面,任何知道这个名字的人都可以访问它。

不要担心MSDN文档说这是由分页文件支持的事实 – 它只会在物理内存耗尽的情况下才会进入磁盘,就像普通的系统内存一样。

在所有方面,由于它是由硬件MMU支持的 – 它与常规内存相同。