我在讀this article,我注意到了jz
指令。這讓我思考:「Jump if zero」(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
是隱含的。
這也可能是編譯器用來優化的東西,但我可以想象它無法進行優化的情況。
是的,我認爲這取決於每個不同跳轉指令所需的週期數。我不知道離手,但是如果你查看你的目標指令集,你應該能夠找到每條指令使用的循環次數的枚舉。 – JustKevin 2014-09-05 04:48:47
它可能仍然需要cmp指令,因爲它是存儲位置的比較。循環計數器也可以在稍後的編譯器中自動分配給寄存器。 – JustKevin 2014-09-05 04:52:02
另請參閱:http://stackoverflow.com/a/22466475 – harold 2014-09-06 09:50:21