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

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

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

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

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

  • Insertion/Erasure 时间
  • 内存位置
  • 异常保证
  • 从值计算迭代器
  • 内存使用

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

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