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