进程间映射与映射/ unordered_map

问题描述:

关于std :: map和boost :: unordered_map之间的差异有很多讨论。但是boost :: interprocess :: map呢?进程间映射与映射/ unordered_map

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

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

谢谢

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

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

因此,与boost::interprocess相关的分配器类涉及额外的取值计算。他们定义了一个自定义的pointer类型,比正常指针稍重。

除此之外,容器与标准容器完全相同。同样的复杂性,元素访问只有一点点开销(额外的增加)。例如,mapunordered_map之间的差异将反映在使用特殊进程间分配程序时的情况。

这不是一个有意义的比较。它们用于完全不同的目的。

interprocess :: map用于在进程之间共享数据。 std :: map在单个进程中使用。

+1

非常感谢你提醒我一个interprocess :: map的目的,这真的很有帮助。我仍然不同意,在使用进程间映射时知道性能的损失是有意义的。你可以想象一种情况,你必须在std :: map + file sharing和interprocess :: map之间进行选择。在这种情况下,这有助于了解性能差异 – 2010-11-24 10:33:54

有在文件boost /间/集装箱/集装箱/ 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. 

所以性能与差异刚刚从差异中,依赖于所的使用分配器的性能共享和操作系统。

+0

实际上,所有`boost :: interprocess`容器都是具有自定义分配器的普通容器。特别是这些分配器定义了一个自定义的“指针”类型,它存储偏移量而不是绝对地址,因为不同的进程将相同的共享内存映射到不同的地址。 – 2010-11-24 16:08:17