c++ - 进程间映射与映射/无序映射

标签 c++ boost interprocess

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

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

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

谢谢

最佳答案

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

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

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

除此之外,容器与标准容器完全相同。同样的复杂性,并且元素访问的开销很小(额外增加)。例如,mapunordered_map 之间的区别将在使用特殊的进程间分配器时反射(reflect)出来。

关于c++ - 进程间映射与映射/无序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265543/

相关文章:

c++ - 指针仍然可以调用成员函数,在它被设置为 NULL 并删除被调用后

c++ - boost 的进程间段管理器分配器本身可以与其他进程共享吗?

C++ - 不理解递归函数的流程

c++ - 如何在 C++ 中将计算分解为两个 double 和一个字符

c++ - 当 GCC 正常时 Clang 报告 "constexpr if condition is not a constant expression"

c++ - 在全局 fixture 中使用系统 boost UTF

c++ - boost::any 构造函数 - const 类型重载解析

c++ - Boost.coroutine 单向 : Legal to get reference to stack variable on suspension?

c++ - RPC 身份验证

c++ - 是否可以将一个函数加载到一些分配的内存中并从那里运行它?