【发布时间】:2020-04-21 14:18:46
【问题描述】:
与现代 C++ 中的非侵入式标准 (std::) 容器相比,Boost.Intrusive 容器是否仍然具有性能优势(具有移动语义、emplace_back 等)?
【问题讨论】:
标签: c++ c++11 move-semantics intrusive-containers boost-intrusive
与现代 C++ 中的非侵入式标准 (std::) 容器相比,Boost.Intrusive 容器是否仍然具有性能优势(具有移动语义、emplace_back 等)?
【问题讨论】:
标签: c++ c++11 move-semantics intrusive-containers boost-intrusive
是的,即使将移动语义与 STL 容器一起使用,侵入式容器仍有许多优点。特别是,内存局部性仍然可能会更好,这可以在某些情况下产生巨大的性能提升。此外,迭代器仍然可以受益匪浅,避免异常带来的任何开销可以加快插入/删除操作。
考虑来自 Boost 参考的Intrusive and non-intrusive containers 部分的表 19.1。大多数这些优势可能仍然存在,例如:
Boost 文档中有detailed performance metrics,它显示了在不同场景中各种操作的相对性能。如果您考虑其中哪些主要不受分配的影响,那么仍有相当大的潜力。
当然,最终性能和最优性问题将主要取决于您的特定应用程序,因此不建议对“最佳”或“最快”方法做出笼统的陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。
【讨论】: