1

关于 std::map 和 boost::unordered_map 之间的区别有很多讨论。但是 boost::interprocess::map 呢?

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

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

谢谢

4

3 回答 3

3

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

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

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

除此之外,容器与标准容器完全相同。相同的复杂性,并且在元素访问上只有一点点开销(额外的添加)。map例如,当使用特殊的进程间分配器时,它们之间的差异unordered_map将反映出来。

于 2010-11-24T16:11:36.977 回答
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.

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

于 2010-11-24T16:00:33.120 回答
1

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

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

于 2010-11-24T10:22:19.160 回答