关于std :: map和boost :: unordered_map之间的差异,有很多讨论。但是boost :: interprocess :: map怎么样?
有人在boost :: interprocess :: map和std :: map之间执行性能测试吗?
我没有使用interprocess :: map这么多,但我觉得超过1M的元素,它变得非常慢。
由于
答案 0 :(得分:3)
Boost进程间容器是具有自定义分配器的标准容器。
原因:当两个进程共享内存时,内存将映射到两个进程中的不同地址。为了能够使用指向共享内存对象的指针,不能使用绝对地址,而是使用相对偏移量(在两个进程中都相同)。
因此,与boost::interprocess
相关的分配器类在解除引用时涉及额外的算术。它们定义了一个自定义pointer
类型,它比普通指针稍微重一些。
除此之外,容器与标准容器完全相同。相同的复杂性,元素访问只需要一点点开销(额外添加)。例如,map
和unordered_map
之间的差异将反映在使用特殊进程间分配器时。
答案 1 :(得分:1)
这不是一个有意义的比较。它们用于完全不同的目的。
interprocess :: map用于在进程之间共享数据。 std :: map用于单个进程。
答案 2 :(得分:1)
文件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.
因此,性能差异仅来自于使用的分配器的性能差异,这取决于共享的类型和操作系统。