两个C++应用程序共享Linux上的只读内存区域

ano*_*non 5 c++ mmap sharing

我有两个进程P1和P2.

我有这个大的只读资源,称为"R",我希望P1和P2都可以访问.

R不仅仅是一个"平坦"的字节组; 它是一堆相互指向的C++对象.

我希望P1和P2只共享R的一个副本 - 不知何故P1加载R进入内存区域(在同一地址的P1和P2中进行mmaped),然后P1和P2都可以访问R中的对象C++对象(没有竞争条件,因为all是只读的).

任何人都熟悉如何做到这一点/陷阱?

Mic*_*son 5

实际上之前已经提出并解决了类似的问题:

最好的答案可能适用于您:使用boost进程库.虽然您仍然无法使用具有虚函数的对象(令人讨厌的vtable指针在共享内存问题之外),但它们确实有工具可以让您使用智能指针到共享内存中的其他对象,以及在共享内存中分配的自定义分配器用于创建std :: vector和std :: map对象.