std::vector的两个性能问题

std::vector的两个性能问题

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

最近发现了两个关于std::vector性能的问题。通过测试发现,使用默认构造函数或删除自定义构造函数后,std::vector的性能比原生数组更慢。另外,多次使用reserve会导致性能下降。因此,在性能场景下,空的构造函数可能更好,而一次性使用reserve或resize性能最佳。

🎯

关键要点

  • 最近发现了两个关于std::vector性能的问题。
  • 使用默认构造函数或删除自定义构造函数后,std::vector的性能比原生数组更慢。
  • 使用空的构造函数能提升1倍的性能,比原生数组更快。
  • push_back操作由于动态扩容导致无法向量化,因此性能较慢。
  • 对于性能场景,推荐使用空的构造函数。
  • SIMD指令对性能提升很大,已知长度的场景应尽量先分配空间以便向量化。
  • 多次使用reserve会导致性能下降,尤其是在最终大小已知的情况下。
  • 一次性使用reserve或resize性能最佳,避免多次内存分配和数据复制。
  • 初始的reserve总是有用,能稍微提升性能。
  • 中间过程多次reserve会导致性能下降,适用于std::unordered_set和std::unordered_map等容器。
🏷️

标签

➡️

继续阅读