コンパイラ

コンパイラの定数畳み込みの例として正しいものはどれか。

  1. A同じ関数を何度も呼ぶ部分を、1回の呼び出しにまとめる
  2. Bx = 3 * 4 を、コンパイル時に計算して x = 12 にする
  3. Cループの本体を4回分並べ、繰り返しの回数を減らす
答えと解説を見る

正解:B. x = 3 * 4 を、コンパイル時に計算して x = 12 にする

定数畳み込みは、コンパイルの時点で値が決まる式を前もって計算し、結果の定数に置き換える最適化です。3 * 4 は実行するたびに同じ12になるので、実行時に掛け算をする必要はありません。定数伝播と組み合わせると、変数を通した計算もまとめて畳み込めます。浮動小数点では丸めの方法をそろえる必要があるなど注意点もあります。ループの本体を並べるのはループ展開で、関数呼び出しをまとめるのは別の最適化です。

  • A. 関数呼び出しをまとめるのは定数畳み込みではありません。
  • B. 正しい。値の決まる式を前もって計算します。
  • C. 本体を並べるのはループ展開です。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 上のコードに定数伝播と定数畳み込みを繰り返し行うと、最終的にどのようなコードになるか。
  2. 上のコードに共通部分式の削除を行ったときの説明として正しいものはどれか。
  3. 不要コードの削除(デッドコード除去)で取り除かれるものとして正しいものはどれか。
  4. 関数のインライン展開の利点と欠点の組み合わせとして正しいものはどれか。
  5. ループ展開(ループアンローリング)の主な効果として正しいものはどれか。