2012-01-31 72 views
1

我在写一个实时库,它导出一个标准接口(VST)并由外部应用程序托管。最快的IN PROCESS技术在win32/C/C++中共享内存和IPC

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

访问表必须快。虚拟内存看起来像是矫枉过正,并且我已经考虑过使用窗口句柄(并且我仍然可以)向消息泵发送消息,但是如果可用的话,我宁愿采用更快的方法。

另外,如果可能的话,PE中的共享数据段是我想避免的。我想我宁愿使用窗户把手。

我现在不关心同步,我可以在事后处理。我只想提供一些关于最快技术在流程空间内发布表的建议。

+0

为什么要使用消息泵?您可以轻松使用全局变量并使用库导出的一些漂亮的界面函数将其隐藏起来。你能详细阐述一下你的需求和标准化接口(VST)吗? – 2012-01-31 19:53:27

+2

咦?进程中的所有内存都可以被该进程的所有线程访问。如果您需要在不同的进程之间共享内存,则使用共享内存。 – 2012-01-31 20:17:06

+0

我有点担心当你开始关注同步时会发生什么。 – 2012-01-31 22:01:40

回答

0

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

不要担心MSDN文档说它由分页文件支持 - 只有在物理内存耗尽的情况下才会进入磁盘,就像常规系统内存一样。

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

4

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