可以在2个不同的进程之间共享堆内存吗?在boost进程间文档中,有一条声明托管堆内存不会创建系统范围的资源
答案 0 :(得分:3)
C ++标准中未预见到进程之间共享内存的任何内容。实际上,每个进程都在其自己的地址空间中运行,并在该地址空间中管理其动态内存,因此无法共享“堆”。
但是,操作系统为您提供了一些在进程之间share memory的方式。最为人所知的方法是使用memory mapped files,它在各种操作系统中都受支持,但以特定于操作系统的方式,因此不可移植。 boost提出了一种可移植的实现,它隐藏了OS特定的部分。
您可以很好地将以此方式获得的存储区用于对象。您可以使用new放置实例化对象。您甚至可以创建一个自定义分配器来在此内存区域中创建动态对象。
但是,这需要格外小心,因为您必须考虑IPC同步以避免竞争,并且您需要记住,一个进程创建的任何指针对于另一个进程都是垃圾(因为它在另一个独立地址中运行)空间)。