コンパイラ

中間表現の一つである三番地コードの特徴として正しいものはどれか。

  1. A1つの命令に、いくつでも演算や括弧を含められる
  2. B1命令は最大3つの番地と1つの演算からなる
  3. C番地として、必ずメモリの物理アドレスを書く
答えと解説を見る

正解:B. 1命令は最大3つの番地と1つの演算からなる

三番地コードでは、複雑な式を、演算が1つだけの単純な命令の並びに分解します。例えば x = (a + b) * c は、t1 = a + b、x = t1 * c の2つになり、1つの命令に登場するのは結果と2つの材料の最大3つの番地です。途中の値には一時的な名前(t1など)を付けます。こうすると計算の順番がはっきりし、最適化やCPUの命令への変換がしやすくなります。番地は変数や一時的な名前で、物理アドレスではありません。

  • A. 1つの命令には演算が1つだけです。
  • B. 正しい。最大3つの番地と1つの演算からなる命令の並びです。
  • C. 番地は変数や一時的な名前で、物理アドレスではありません。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. レジスタ割り当ての準備として行う生存区間(ライブネス)の解析で求めるものはどれか。
  2. ある関数の中で、同時に生きている値の数が最も多いところで5個だった。干渉グラフがこの5個以外の制約を生まない単純な場合、すべての値をスピルなしでレジスタに置くには、レジスタが少なくとも何個必要か。
  3. 繰り返し回数が100回のループを、本体を4回分並べるループ展開で書き換えると、回数の判定と分岐は何回になるか。(100は4で割り切れるものとする)
  4. C言語のプログラムから実行ファイルができるまでの一般的な流れとして正しいものはどれか。
  5. 生成した機械語の短い並びを小さな窓で見て、むだな命令の組み合わせをより良い命令に置き換える最適化を何と呼ぶか。