首页 > 后端开发 > C++ > 为什么 std::vector 迭代比 std::array 迭代更快,尽管最初的基准测试表明并非如此?

为什么 std::vector 迭代比 std::array 迭代更快,尽管最初的基准测试表明并非如此?

Susan Sarandon
发布: 2024-11-01 15:35:02
原创
332 人浏览过

Why is std::vector iteration faster than std::array iteration despite initial benchmarks suggesting otherwise?

为什么 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板