与现代 C++ 中的Boost.Intrusive
非侵入式标准 ( ) 容器相比(具有移动语义等) ,容器是否仍然具有性能优势?std::
emplace_back
问问题
277 次
1 回答
4
是的,即使将移动语义与 STL 容器一起使用,侵入式容器仍有许多优点。特别是,内存局部性仍然可能会更好,这可以在某些情况下产生巨大的性能提升。此外,迭代器仍然可以受益匪浅,避免异常带来的任何开销可以加快插入/删除操作。
考虑 Boost 参考的侵入式和非侵入式容器部分的表 19.1 。大多数这些优势可能仍然存在,例如:
- 插入/擦除时间
- 内存局部性
- 例外保证
- 从值计算迭代器
- 内存使用
Boost 文档有详细的性能指标,显示了不同场景下各种操作的相对性能。如果您考虑其中哪些主要不受分配的影响,那么仍有相当大的潜力。
当然,最终性能和最优性问题将主要取决于您的特定应用程序,因此不建议对“最佳”或“最快”方法做出笼统的陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。
于 2020-01-03T00:06:00.053 回答