在现代C++中,侵入式容器是否仍然比非侵入式容器具有性能优势?

Do Intrusive containers still have performance advantages over non-intrusive ones in modern C++?

本文关键字:性能 C++ 是否      更新时间:2023-10-16

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

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

请考虑 Boost 参考的侵入式和非侵入式容器部分中的表 19.1。这些优势中的大多数可能会保留,例如:

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

Boost 文档包含详细的性能指标,这些指标显示了不同场景中各种操作的相对性能。如果您考虑其中哪一个主要不受分配的影响,那么仍然有相当大的潜力。

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