コンパイラ
上のコードに共通部分式の削除を行ったときの説明として正しいものはどれか。
x = (a + b) * c;
y = (a + b) * d;
- Aa + b を1回だけ計算して一時変数に入れ、2つの式で使い回す
- Bx と y は似た式なので、どちらか一方の計算を削除する
- C掛け算を足し算に置き換えて、計算を軽くする
答えと解説を見る
正解:A. a + b を1回だけ計算して一時変数に入れ、2つの式で使い回す
共通部分式の削除は、同じ値になる式を何度も計算している場合に、1回だけ計算して結果を再利用する最適化です。この例では、t = a + b を計算しておき、x = t * c、y = t * d とすれば足し算が1回減ります。ただし2つの式の間でaやbが書き換えられないことを確かめる必要があります。xとyは別の値なので、どちらかを削除することはできません。掛け算を軽い演算に置き換えるのは強度低減という別の最適化です。
- A. 正しい。同じ式を1回だけ計算して使い回します。
- B. xとyは値が違うので、どちらも必要です。
- C. 重い演算を軽くするのは強度低減です。