在现代 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" 方法进行概括性陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。
与现代 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" 方法进行概括性陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。