編譯器 對上方迴圈中的索引計算 i * 4 進行強度削減時,下列轉換何者正確?for (i = 0; i < n; i++) sum += a[i * 4]; A將 i * 4 替換為在編譯時計算好的常數 B將迴圈次數減為四分之一,並將主體並排4次份 C另外準備一個變數,每次重複就加4 查看答案與解析 正確答案:C. 另外準備一個變數,每次重複就加4 強度削減是將較重的運算替換為較輕的運算的最佳化。與其在迴圈中每次以乘法求 i * 4,不如從 j = 0 開始,每次重複做 j += 4,乘法就變成了加法。由於 i 一改變值就會跟著改變,所以不能替換為常數。此外,乘以4也可替換為位移指令(i << 2),這也是強度削減的一種。將主體並排4次份的是迴圈展開。 A. 值會隨 i 改變,所以不能替換為常數。B. 並排主體的是迴圈展開。C. 正確。將乘法替換為每次重複的加法。