2011-12-26 133 views
1

原始代碼展開while循環

while(i<30){ 
// do something 
i++; 
} 

展開while循環

while(i<15){ 
// do something twice 
i+=2; 
} 

廣東話我們展開它,如上所示。我們總是必須像http://en.wikipedia.org/wiki/Loop_unrolling那樣做嗎?

+1

試試看看。特別要注意循環結尾的'i'的值。 – 2011-12-26 14:00:53

回答

2

一般來說,答案是否定的。它適用於30和15,因爲30是均勻的,但對於奇數不會很容易。發明了"Duff's device"來處理一般情況。不過,這很難看。

+0

所以不僅適用於while循環。對於for循環來說,如果迭代不會發生在偶數上,那麼這很重要嗎? – klijo 2011-12-28 22:50:05

+1

@klijo這是正確的:當所需的迭代次數不是展開次數的倍數時,您需要手動完成剩餘的'n%k'迭代,或者在不展開的情況下以緊密的循環完成。 – dasblinkenlight 2011-12-29 00:24:08