コンパイラ
最適化をかけてコンパイルしたプログラムをデバッガで調べると、一部の変数の値が「表示できない」となることがある。主な理由はどれか。
- A最適化をかけると、デバッガがプログラムを一切読み込めなくなるから
- B変数の値が、コンパイルのたびにランダムに変わるから
- C値がレジスタの使い回しや計算の削除で残っていないから
答えと解説を見る
正解:C. 値がレジスタの使い回しや計算の削除で残っていないから
最適化では、変数をメモリに置かずにレジスタだけで扱い、使い終わったらそのレジスタを別の値に使い回します。定数伝播で計算そのものが消えることもあります。そのため、デバッガで止めた時点ではもうその変数の値がどこにも残っていない場合があり、「最適化で削除された」などと表示されます。デバッグのときは最適化を弱めるか、デバッグ向けの最適化の設定を使うのが一般的です。デバッガが読み込めなくなるわけではありません。
- A. デバッガは最適化したプログラムも読み込めます。
- B. 値がランダムに変わるわけではありません。
- C. 正しい。レジスタの使い回しや計算の削除で、値が残っていないためです。