コンパイラ
コンパイラの定数畳み込みの例として正しいものはどれか。
- A同じ関数を何度も呼ぶ部分を、1回の呼び出しにまとめる
- Bx = 3 * 4 を、コンパイル時に計算して x = 12 にする
- Cループの本体を4回分並べ、繰り返しの回数を減らす
答えと解説を見る
正解:B. x = 3 * 4 を、コンパイル時に計算して x = 12 にする
定数畳み込みは、コンパイルの時点で値が決まる式を前もって計算し、結果の定数に置き換える最適化です。3 * 4 は実行するたびに同じ12になるので、実行時に掛け算をする必要はありません。定数伝播と組み合わせると、変数を通した計算もまとめて畳み込めます。浮動小数点では丸めの方法をそろえる必要があるなど注意点もあります。ループの本体を並べるのはループ展開で、関数呼び出しをまとめるのは別の最適化です。
- A. 関数呼び出しをまとめるのは定数畳み込みではありません。
- B. 正しい。値の決まる式を前もって計算します。
- C. 本体を並べるのはループ展開です。