コンパイラ

JITコンパイルを使う実行環境の特徴として正しいものはどれか。

  1. Aプログラムを実行する前に、すべてを機械語に翻訳してから配布する
  2. B実行中によく使う部分を機械語にし、実行時の情報も使える
  3. C機械語を一切使わず、いつまでもバイトコードを1命令ずつ解釈し続ける
答えと解説を見る

正解:B. 実行中によく使う部分を機械語にし、実行時の情報も使える

JITコンパイルでは、最初はバイトコードを解釈しながら実行し、何度も実行される部分(ホットスポット)を見つけたら、実行中にそこを機械語にコンパイルします。実際に通る分岐や渡される型などの実行時の情報を使って、前もって行うコンパイルでは難しい大胆な最適化ができます。想定が外れたら解釈の実行に戻るしくみも備えています。前もってすべてを翻訳するのは事前(AOT)コンパイル、解釈だけを続けるのは純粋なインタプリタです。

  • A. 実行前にすべて翻訳するのは事前(AOT)コンパイルです。
  • B. 正しい。実行中に機械語にし、実行時の情報も使えます。
  • C. 解釈だけを続けるのは純粋なインタプリタです。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. LLVMの基本的な構成として正しいものはどれか。
  2. コンパイラの最適化のレベルを指定するオプションで、最適化をしない設定(-O0など)がよく使われる場面はどれか。
  3. プロファイルを使った最適化(PGO)の説明として正しいものはどれか。
  4. リンク時最適化(LTO)によって可能になる最適化として最も適切なものはどれか。
  5. C言語で、符号付き整数のオーバーフローは未定義動作である。この前提で、上の関数を最適化するコンパイラが生成しうるコードとして正しいものはどれか。