首页 > 后端开发 > C++ > 正文

为什么 std::vector 在迭代中比 std::array 更快?

Linda Hamilton
发布: 2024-11-02 02:51:30
原创
143 人浏览过

Why is std::vector Faster than std::array in Iteration?

通过 std::array 和 std::vector 迭代之间的性能差异

我之前的基准测试,旨在评估以下迭代的性能std::array 和 std::vector 包含一些缺陷。然而,在重新审视这个问题时,我发现 std::vector 实际上比 std::array 更快。

为了减轻优化的潜力,我采用了几种措施,包括:

  • 利用循环的结果来防止编译器优化
  • 使用 -O3 标志进行编译以提高速度
  • 使用 std::chrono 专门测量目标 for 循环

两种数据结构的执行时间如下:

std::array:

$ g++ arrVsVec.cpp -O3
$ ./a.out
result: 0
time: 99.554109
登录后复制

std::vector:

$ g++ arrVsVec.cpp -O3
$ ./a.out
result: 0
time: 30.734491
登录后复制

差异原因:

性能差异源于 std::array 的内存页面未驻留在进程地址中空间。具体来说,全局范围 std::array 驻留在可执行文件的 .bss 部分中,该部分尚未被分页并初始化为零。另一方面,std::vector 已被分配并初始化为零,导致其内存页面已存在于地址空间中。

解决问题:

为了消除此问题并证明两种数据结构之间的奇偶性,可以添加以下代码作为 main 的第一行以引入页面:

<code class="cpp">std::fill_n(v.data(), n, 1); // included in <algorithm></code>
登录后复制

或者,在 Linux 系统上,一个可以使用 mlock(v.data(), v.size() * sizeof(v[0]));强制页面进入地址空间。请参阅 man mlock 手册页了解更多详细信息。

以上是为什么 std::vector 在迭代中比 std::array 更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!