💡
原文中文,约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等容器。
➡️