进程间通信堆内存

时间:2018-10-07 09:44:17

标签: c++ boost shared-memory interprocess

可以在2个不同的进程之间共享堆内存吗?在boost进程间文档中,有一条声明托管堆内存不会创建系统范围的资源

1 个答案:

答案 0 :(得分:3)

C ++标准中未预见到进程之间共享内存的任何内容。实际上,每个进程都在其自己的地址空间中运行,并在该地址空间中管理其动态内存,因此无法共享“堆”。

但是,操作系统为您提供了一些在进程之间share memory的方式。最为人所知的方法是使用memory mapped files,它在各种操作系统中都受支持,但以特定于操作系统的方式,因此不可移植。 boost提出了一种可移植的实现,它隐藏了OS特定的部分。

您可以很好地将以此方式获得的存储区用于对象。您可以使用new放置实​​例化对象。您甚至可以创建一个自定义分配器来在此内存区域中创建动态对象。

但是,这需要格外小心,因为您必须考虑IPC同步以避免竞争,并且您需要记住,一个进程创建的任何指针对于另一个进程都是垃圾(因为它在另一个独立地址中运行)空间)。