在網上看到一篇文章,裡面說i++和i--的效率有差別,這個差別我早就知道,其實就是一個标志寄存器的重用問題,雖然早就知道還是想寫出來來展示一下計算的魅力,這兩個例子是:
int loop_dec(int n)
{
int i = 0;
int v = 0;
for(i = n; i > 0; i--)
v +=i;
return v;
}
int loop_inc(int n)
for(i = 0; i < n; i++)
我們要想得到其中的奧妙隻有通過彙編來說明,于是objdump一下上面的兩個函數發現用dec的函數會少一個cmp語句, 為何呢?其實這個i--效率高并不是--比++有什麼特殊的,而是巧在這是和0比較,衆所周知,cpu的寄存器中有進位和溢出相關的東西,本來是正數,一旦小于0了,可以通過狀态寄存器看出來,而cpu指令中也有根據狀态寄存器跳轉的指令,這樣我們就可以利用這些了,就是這麼簡單,沒有什麼大不了的,不信你把和0比較換成和1比較,i--的優勢就沒有了,要知道,0永遠都是最具魅力的數字
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273975