在现代C++中,侵入式容器是否仍然比非侵入式容器具有性能优势?
Do Intrusive containers still have performance advantages over non-intrusive ones in modern C++?
在现代C++(具有移动语义、emplace_back
等(中,Boost.Intrusive
容器是否仍然比非侵入式标准(std::
(容器具有性能优势?
是的,即使将移动语义与 STL 容器一起使用,侵入式容器仍然存在许多优点。特别是,内存局部性仍然可能会更好,这在某些情况下可以产生巨大的性能提升。此外,迭代器仍然可以受益匪浅,避免异常带来的任何开销可以加快插入/删除操作的速度。
请考虑 Boost 参考的侵入式和非侵入式容器部分中的表 19.1。这些优势中的大多数可能会保留,例如:
- 插入/擦除时间
- 内存位置
- 例外保证
- 从值计算迭代器
- 内存使用情况
Boost 文档包含详细的性能指标,这些指标显示了不同场景中各种操作的相对性能。如果您考虑其中哪一个主要不受分配的影响,那么仍然有相当大的潜力。
当然,最终性能和最优性的问题将主要取决于您的特定应用程序,因此不建议对"最佳"或"最快"方法做出笼统的陈述。分析您的特定代码并评估与额外复杂性相关的权衡是无可替代的。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- 不同的类或结构初始化方法之间的性能差异是什么?