关于 std::map 和 boost::unordered_map 之间的区别有很多讨论。但是 boost::interprocess::map 呢?
有人在 boost::interprocess::map 和 std::map 之间进行过性能测试吗?
我没有经常使用 interprocess::map 但我感觉超过 1M 个元素,它变得非常慢。
谢谢
最佳答案
Boost 进程间容器是带有自定义分配器的标准容器。
原因:当两个进程共享内存时,内存在两个进程中被映射到不同的地址。为了能够使用指向共享内存对象的指针,不能使用绝对地址,而必须使用相对偏移量(这在两个进程中是相同的)。
所以与 boost::interprocess
相关的分配器类在取消引用时涉及额外的算术。他们定义了一个自定义的 pointer
类型,使用起来比普通指针稍微重一些。
除此之外,容器与标准容器完全相同。同样的复杂性,并且元素访问的开销很小(额外增加)。例如,map
和 unordered_map
之间的区别将在使用特殊的进程间分配器时反射(reflect)出来。
关于c++ - 进程间映射与映射/无序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265543/