进程间映射与map / unordered_map

时间:2010-11-24 10:04:55

标签: c++ boost interprocess

关于std :: map和boost :: unordered_map之间的差异,有很多讨论。但是boost :: interprocess :: map怎么样?

有人在boost :: interprocess :: map和std :: map之间执行性能测试吗?

我没有使用interprocess :: map这么多,但我觉得超过1M的元素,它变得非常慢。

由于

3 个答案:

答案 0 :(得分:3)

Boost进程间容器是具有自定义分配器的标准容器。

原因:当两个进程共享内存时,内存将映射到两个进程中的不同地址。为了能够使用指向共享内存对象的指针,不能使用绝对地址,而是使用相对偏移量(在两个进程中都相同)。

因此,与boost::interprocess相关的分配器类在解除引用时涉及额外的算术。它们定义了一个自定义pointer类型,它比普通指针稍微重一些。

除此之外,容器与标准容器完全相同。相同的复杂性,元素访问只需要一点点开销(额外添加)。例如,mapunordered_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.

因此,性能差异仅来自于使用的分配器的性能差异,这取决于共享的类型和操作系统。