【问题标题】:Do Intrusive containers still have performance advantages over non-intrusive ones in modern C++?与现代 C++ 中的非侵入式容器相比,侵入式容器是否仍然具有性能优势?
【发布时间】:2020-04-21 14:18:46
【问题描述】:

与现代 C++ 中的非侵入式标准 (std::) 容器相比,Boost.Intrusive 容器是否仍然具有性能优势(具有移动语义、emplace_back 等)?

【问题讨论】:

    标签: c++ c++11 move-semantics intrusive-containers boost-intrusive


    【解决方案1】:

    是的,即使将移动语义与 STL 容器一起使用,侵入式容器仍有许多优点。特别是,内存局部性仍然可能会更好,这可以在某些情况下产生巨大的性能提升。此外,迭代器仍然可以受益匪浅,避免异常带来的任何开销可以加快插入/删除操作。

    考虑来自 Boost 参考的Intrusive and non-intrusive containers 部分的表 19.1。大多数这些优势可能仍然存在,例如:

    • 插入/擦除时间
    • 内存位置
    • 例外保证
    • 从值计算迭代器
    • 内存使用

    Boost 文档中有detailed performance metrics,它显示了在不同场景中各种操作的相对性能。如果您考虑其中哪些主要不受分配的影响,那么仍有相当大的潜力。

    当然,最终性能和最优性问题将主要取决于您的特定应用程序,因此不建议对“最佳”或“最快”方法做出笼统的陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 2012-12-26
      • 2010-11-18
      • 2011-02-19
      • 2013-06-08
      相关资源
      最近更新 更多