コンパイラ

最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。

  1. A最適化をかけると、デバッガがプログラムを一切読み込めなくなるから
  2. B変数の値が、コンパイルのたびにランダムに変わるから
  3. C値がレジスタの使い回しや計算の削除で残っていないから
答えと解説を見る

正解:C. 値がレジスタの使い回しや計算の削除で残っていないから

最適化では、変数をメモリに置かずにレジスタだけで扱い、使い終わったらそのレジスタを別の値に使い回します。定数伝播で計算そのものが消えることもあります。そのため、デバッガで止めた時点ではもうその変数の値がどこにも残っていない場合があり、「最適化で削除された」などと表示されます。デバッグのときは最適化を弱めるか、デバッグ向けの最適化の設定を使うのが一般的です。デバッガが読み込めなくなるわけではありません。

  • A. デバッガは最適化したプログラムも読み込めます。
  • B. 値がランダムに変わるわけではありません。
  • C. 正しい。レジスタの使い回しや計算の削除で、値が残っていないためです。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 上の関数に、定数伝播・定数畳み込み・不要コードの削除を十分に行ったとき、関数が返す値と残るコードとして正しいものはどれか。
  2. コンパイラの字句解析の役割として正しいものはどれか。
  3. コンパイラの構文解析で行うこととして正しいものはどれか。
  4. コンパイラの意味解析で見つかる誤りの例として最も適切なものはどれか。
  5. 抽象構文木(AST)の特徴として正しいものはどれか。