首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程间映射与映射/无序映射

进程间映射与映射/无序映射
EN

Stack Overflow用户
提问于 2010-11-24 18:04:55
回答 3查看 519关注 0票数 1

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

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

我很少使用interprocess::map,但我感觉超过1M个元素,它会变得非常慢。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-25 00:11:37

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-11-24 18:22:19

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

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

票数 1
EN

Stack Overflow用户

发布于 2010-11-25 00:00:33

在文件boost/interprocess/containers/container/map.hpp:中有这样的注释

代码语言:javascript
复制
// 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.

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4265543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档