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

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

Susan Sarandon
Susan Sarandon原创
2024-11-01 15:35:02257浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn