性能 – “如果为零跳”(jz)更快吗?

我正在读
this article,我注意到了jz指令.这让我想到:

会这个代码的汇编

for (int i=max;i!=0;--i){
    //Some operation
}

优于此代码的程序集?

for (int i=0;i<max;++i){
    //Some operation
}

只要您不关心数据是否随着i的增加而处理,就没有语义差异.缓存未命中也不应该受到影响,因为它们可以以任何方式顺序工作.

我在汇编时写的不够好,但是我认为第一个例子只使用jz.第二个是使用cmp,然后是jg,还需要另一个变量max.第一个例子只需要循环计数器,因为0是隐式的.

这也可能是编译器用来优化的东西,但我可以想象它无法进行优化的情况.

最佳答案 假设我们有cmp a,b.

处理器将临时减去操作数(不影响它们的值),正确设置标志,然后评估jmp跳转操作.

所以,在你的例子中制作一个jz更快,而不是cmp和一个jmp.

点赞