原始代碼展開while循環
while(i<30){
// do something
i++;
}
展開while循環
while(i<15){
// do something twice
i+=2;
}
廣東話我們展開它,如上所示。我們總是必須像http://en.wikipedia.org/wiki/Loop_unrolling那樣做嗎?
原始代碼展開while循環
while(i<30){
// do something
i++;
}
展開while循環
while(i<15){
// do something twice
i+=2;
}
廣東話我們展開它,如上所示。我們總是必須像http://en.wikipedia.org/wiki/Loop_unrolling那樣做嗎?
一般來說,答案是否定的。它適用於30和15,因爲30是均勻的,但對於奇數不會很容易。發明了"Duff's device"來處理一般情況。不過,這很難看。
所以不僅適用於while循環。對於for循環來說,如果迭代不會發生在偶數上,那麼這很重要嗎? – klijo 2011-12-28 22:50:05
@klijo這是正確的:當所需的迭代次數不是展開次數的倍數時,您需要手動完成剩餘的'n%k'迭代,或者在不展開的情況下以緊密的循環完成。 – dasblinkenlight 2011-12-29 00:24:08
試試看看。特別要注意循環結尾的'i'的值。 – 2011-12-26 14:00:53