コンパイラ

コンパイラのレジスタ割り当てで、干渉グラフを塗り分ける(彩色する)方法を使うとき、グラフの節と辺が表すものの組み合わせとして正しいものはどれか。

  1. A節は命令、辺は命令の実行の順番
  2. B節はレジスタ、辺はレジスタどうしの配線
  3. C節は値、辺は同時に生きている関係
答えと解説を見る

正解:C. 節は値、辺は同時に生きている関係

干渉グラフでは、変数や途中の値を節にし、ある時点で両方ともまだ使われる(生きている)2つの値を辺で結びます。辺でつながった値は同時に必要なので、同じレジスタには入れられません。レジスタの数をk個として、隣どうしが同じ色にならないようにk色で塗り分けられれば、色をそのままレジスタに対応させて割り当てられます。塗り分けられない場合は、一部の値をメモリに退避(スピル)します。命令の順番やレジスタの配線を表すグラフではありません。

  • A. 命令の順番を表すグラフではありません。
  • B. レジスタの配線を表すグラフではありません。
  • C. 正しい。同時に生きている値どうしを辺で結びます。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. レジスタ割り当てで「スピル」が起こると、生成されるコードはどうなるか。
  2. コンパイラの命令スケジューリングの主な目的はどれか。
  3. 上の関数の最後の再帰呼び出しに末尾呼び出しの最適化を行うと、どのような効果があるか。
  4. コンパイラとインタプリタの違いとして正しいものはどれか。
  5. JITコンパイルを使う実行環境の特徴として正しいものはどれか。