为什么在 C++ 中处理有序数组比无序数组要快?


在 C++ 中,处理有序数组比无序数组更快,这是由于分支预测。在计算机架构中,分支预测确定程序指令流中的条件分支(跳转)是否可能发生。

我们来看一个示例 −

if(arr[i] > 50) {
   Do some operation B
} else {
   Do some operation A
}

如果我们针对下面的无序和有序数组运行此代码 100 次元素,就会发生如下情况 −

对于有序数组 −

1, 2, 3, 4, 5, …… 50, 51………100
A, A, A, A, A A, B B

它将加载流水线和正确的顺序中的正确分支

A, A, A, A, A, A, A, A A, B B

对于无序数组 −

5, 51, 6, 90, 4, 49, 60…
A, B, A, B, A, A, A, B

分支预测在此不发挥重要作用。预测 A 和 B 之间的正确操作非常困难。

更新时间:23-Jun-2020

221 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告