2008年1月2日 星期三

迴圈小技巧

從PTT上看到別人的小技巧,和大家分享一下。

若程式裡的迴圈是用來計數的話
ex.
for(i = 0; i <= n; i++)
s = s + i;

可以做以下的修改
for(i = n; i; i--)
s = s + i;

如此,編譯成組合語言時,會少一個cmp的指令。
修改後的組合語言,會用jne來判斷,若i變成0,會將flag設為0。


小技巧的確是能將效率提升,然而卻可能讓程式變的不可讀,有利有弊。最佳的情況當然是compiler夠聰明的話,程式寫作就可以輕鬆多了。

0 意見: