关于std::map和boost::unordered_map之间的差异有很多讨论。但是boost::interprocess::map呢?
有人在boost::interprocess::map和std::map之间执行了性能测试吗?
我很少使用interprocess::map,但我感觉超过1M个元素,它会变得非常慢。
谢谢
发布于 2010-11-25 00:11:37
Boost进程间容器是带有自定义分配器的标准容器。
原因:当两个进程共享内存时,内存映射到两个进程中的不同地址。为了能够使用指向共享内存对象的指针,不能使用绝对地址,而必须使用相对偏移量(在两个进程中都是相同的)。
因此,与boost::interprocess相关的分配器类在取消引用时涉及额外的算法。它们定义了一个自定义的pointer类型,使用起来比普通指针稍重一些。
除此之外,容器与标准容器完全相同。同样的复杂性,在元素访问上只有很小的开销(额外的增加)。例如,当使用特殊的进程间分配器时,map和unordered_map之间的差异将在中得到反映。
发布于 2010-11-24 18:22:19
这不是一个有意义的比较。它们用于完全不同的目的。
interprocess::map用于在进程之间共享数据。map在单个进程中使用。
发布于 2010-11-25 00:00:33
在文件boost/interprocess/containers/container/map.hpp:中有这样的注释
// This file comes from SGI's stl_map/stl_multimap files. Modified by Ion Gaztanaga.
// Renaming, isolating and porting to generic algorithms. Pointer typedef
// set to allocator::pointer to allow placing it in shared memory.因此,性能差异只是来自所使用的分配器的性能差异,这取决于共享的类型和操作系统。
https://stackoverflow.com/questions/4265543
复制相似问题