进程间通信堆内存

Interprocess communication heap memory

本文关键字:内存 进程间通信      更新时间:2023-10-16

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

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

但是,操作系统为您提供了一些在进程之间共享内存的方法。 最广为人知的方法是使用内存映射文件,这些文件在广泛的操作系统中受支持,但以操作系统特定的方式,因此不可移植。boost提出了一个隐藏操作系统特定部分的可移植实现。

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

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