基本情報技術者試験 2003年度 = 平成15年度・秋期 午前 問42

 コンパイラにおける最適化の説明として、適切なものはどれか。

 ア  オブジェクトコードを生成する代わりに、インタプリタ用の中間コードを生成する。
 イ  コンパイルするコンピュータとは異なる機種で動作するオブジェクトコードを生成する。
 ウ  プログラムが実行されたときに、制御が渡ったルーチン名やある時点での変数の内容を表示するようなオブジェクトコードを生成する。
 エ  プログラムコードを解析して、実行時の処理効率がより良くなるようなオブジェクトコードを生成する。

解答

 エ

解説

 最適化のプロセスでは、プログラムコードを解析して、実行時の処理効率がより良くなるようにオブジェクトコードを生成します
 C言語のプログラムを例に、単純な最適化について考えてみましょう。

  x = 10;
  for (i = 0; i < 1000; i++) {
    a = 3 * x;
    b = a * i + 5;
    c = a * i + 10;
  }

このプログラムにおいて、(プログラム外部からの特殊な技術等を用いない限り)、aに代入される値は、必ず30となります。したがって、繰り返しの度に3 * xの計算をするのは馬鹿げた話です。
 最適化を行うコンパイラであれば、以下のようなプログラムと同等なコードを生成するでしょう。

  x = 10;
  a = 3 * x;
  for (i = 0; i < 1000; i++) {
    b = a * i + 5; /* または int __temp = a * i; b = __temp + 5; */
    c = b + 5; /* c = __temp + 10; */
  }

乗算の回数が大幅に減少し、スピードアップが望めます。もちろん、手法としては、高速化を目的とした最適化だけではなく、記憶域を節約するような最適化なども存在します。


BohYoh.comトップページへ