为什么这段代码被认为是优化的?

reason why this code is considered optimized?

我正在优化一些代码并遇到了这个,有人能告诉我为什么这段代码更多 'optimized'

for (i = 0; i < 1000; i+=2){
    float var = numberOfEggs*arrayX[i] + arrayY[i];
    arrayY[i+1] =  var;
    arrayY[i+2] = numberOfEggs*arrayX[i+1] + var;
}

比这个版本?

for(long i = 0; i < 1000 ; ++i)
       arrayY[i+1] = numberOfEggs*arrayX[i] + arrayY[i];

感谢任何帮助,谢谢!

第一个例子是每次迭代执行两个赋值。你可以通过增量语句来判断。

这称为循环展开。通过每次迭代执行两次分配,您将删除一半的分支。

大多数处理器不喜欢分支指令。处理器需要判断是否重新加载指令缓存(分支预测)。每次迭代至少有两个分支。第一个是为了比较,第二个是循环回比较。

要进行实验,请尝试每次迭代使用 4 个分配,然后进行分析。