2016-02-05 191 views
0

我需要在共享内存中放置STL映射。还有多个映射的进程访问。任何指向它是如何完成的?共享内存中的C++ STL映射

我已经检查过这个链接。但需要一个更简单的方法。 Map in Shared memory

+2

使用增强,因为这是一个有点痛苦的实现。或者你受限于你可以使用的库? – Joe

+0

不要。 STL实现的映射不太可能是二进制稳定的。 –

+0

@BillyONeal,假设你指的是ABI的稳定性,并且即使假定这是真的,当然如果所有进程都使用相同的编译器版本而不是问题? (还有其他问题,但我不认为这是其中的一个!) –

回答

0

对于这个工作,你需要使用一个自定义的分配器将从共享内存区域分配,使地图节点都在共享内存中,从而使pointer型分配器的不只是一个原始指针,但可以在映射到不同进程中的不同地址时引用共享内存区域。

您还需要你的std::map实现正确使用分配的pointer到处它需要使用一个指针,而这个isn't guaranteed by the standard

当前最简单的方法是使用Boost.Interprocess,它为共享内存提供了一个很好的API,并提供了与它一起正常工作的分配器和容器。