コンパイラ

コンパイラの最適化が守らなければならない基本的な条件として正しいものはどれか。

  1. A元のプログラムより、必ず命令の数を半分以下にすること
  2. B速くなるなら、プログラムの出力が多少変わってもよいこと
  3. C正しいプログラムについて、外から見える結果を変えないこと
答えと解説を見る

正解:C. 正しいプログラムについて、外から見える結果を変えないこと

最適化は、プログラムを速くしたり小さくしたりするための変換ですが、正しく書かれたプログラムの出力やファイルへの書き込みなど、外から見える振る舞いを変えてはいけません。この条件のもとで、計算の順番を入れ替えたり、不要な計算を削除したりします。命令の数をどれだけ減らせるかは場合によって違い、半分以下という決まりはありません。結果を変えてもよいのは、浮動小数点の並べ替えを許すなど、利用者が明示的に選んだ場合に限られます。

  • A. 減らせる量に決まりはありません。
  • B. 速さのために結果を変えてはいけません。
  • C. 正しい。外から見える結果を変えないことが大原則です。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. コード生成の段階の一つである命令選択(インストラクションセレクション)の説明として正しいものはどれか。
  2. クロスコンパイラの説明として正しいものはどれか。
  3. 最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。
  4. 上の関数に、定数伝播・定数畳み込み・不要コードの削除を十分に行ったとき、関数が返す値と残るコードとして正しいものはどれか。
  5. コンパイラの字句解析の役割として正しいものはどれか。