为什么 std::vector 迭代比 std::array 迭代更快,尽管最初的基准测试表明并非如此?
为什么 std::vector 迭代超越 std::array 迭代
原始结论误解
最初,一个有缺陷的基准测试建议 std::array 迭代比 std::vector 迭代更快。然而,在修正基准测试后,发现 std::vector 明显更快。
基准实现
为了确保准确性,基准测试采用了多项改进:
- 利用结果来防止循环优化
- -O3 优化标志以提高速度
- std::chrono 用于隔离循环测量,没有静态变量干扰
结果和解释
基准测试结果显示 std::vector 迭代大约在 30 毫秒内完成,而 std::array 迭代大约需要 99 毫秒。
差异源于内存页面行为。在基准测试中,std::array 位于可执行文件的 .bss 部分(初始化为零),因此其内存页未加载到进程地址空间中。相反,std::vector 已被分配并填零,导致页面存在。
解决方案
将 std::array 的页面预置为零-在 Linux 上填充或使用 mlock() 将其页面带入地址空间,使其迭代速度与 std::vector 的迭代速度相同。
以上是为什么 std::vector 迭代比 std::array 迭代更快,尽管最初的基准测试表明并非如此?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)