コンパイラ

コード生成の段階の一つである命令選択(インストラクションセレクション)の説明として正しいものはどれか。

  1. A中間表現の演算を、対象のCPUがもつ命令のどれで実現するかを決める
  2. B実行するプロセスをOSがどの順番で選ぶかを決める
  3. Cソースコードの中から、コメントとして書かれた命令を選び出す
答えと解説を見る

正解:A. 中間表現の演算を、対象のCPUがもつ命令のどれで実現するかを決める

命令選択は、中間表現の演算の並びを、対象のCPUの具体的な命令に対応づける処理です。同じ計算でもCPUによって使える命令は異なり、例えば a * b + c を、CPUに積和演算(FMA)の命令があれば1命令で、なければ掛け算と足し算の2命令で実現します。メモリの番地の計算をアドレッシングモードにまとめるなど、CPUの命令をうまく使うほど速いコードになります。OSのスケジューリングやコメントの処理とは関係ありません。

  • A. 正しい。中間表現の演算をCPUの命令に対応づけます。
  • B. プロセスの順番はOSのスケジューラが決めます。
  • C. コメントは字句解析で取り除かれます。
この分野を解く 分野ページへ

コンパイラのほかの問題

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