通过 std::array 和 std::vector 迭代之间的性能差异
我之前的基准测试,旨在评估以下迭代的性能std::array 和 std::vector 包含一些缺陷。然而,在重新审视这个问题时,我发现 std::vector 实际上比 std::array 更快。
为了减轻优化的潜力,我采用了几种措施,包括:
两种数据结构的执行时间如下:
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中文网其他相关文章!