必ず受かる情報処理技術者試験

当サイトは、情報処理技術者試験に合格するためのWebサイトです。
ITパスポート試験,基本情報技術者,応用情報技術者,高度試験の過去問題と解答及び詳細な解説を掲載しています。
  1. トップページ
  2. 応用情報技術者
  3. 平成27年度秋季問題一覧
  4. 平成27年度秋季問題19-解答・解説-分析

平成27年度秋季問題

問題19

目的プログラムの実行時間を短くするためにコンパイラが行う最適化方法として、適切なものはどれか。

繰返し回数の多いループは、繰返し回数がより少ないループを複数回繰り返すように変形する。 例えば、10,000回実行されるループは、100回実行されるループを100回繰り返すようにする。
算術式の中で、加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。 例えば、“X + X”は“2 * X”で置き換える。
定数が格納される変数を追跡し、途中で値が変更されないことが確認できれば、その変数を定数で置き換える。
プログラム中の2か所以上で同じ処理を行っている場合は、それらをサブルーチン化し、元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。

目的プログラムの実行時間を短くするためにコンパイラが行う最適化方法として、適切なものはどれか。

繰返し回数の多いループは、繰返し回数がより少ないループを複数回繰り返すように変形する。 例えば、10,000回実行されるループは、100回実行されるループを100回繰り返すようにする。
算術式の中で、加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。 例えば、“X + X”は“2 * X”で置き換える。
定数が格納される変数を追跡し、途中で値が変更されないことが確認できれば、その変数を定数で置き換える。
プログラム中の2か所以上で同じ処理を行っている場合は、それらをサブルーチン化し、元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。

解答:ウ

<解説>

コンパイラとは、コンピュータ・プログラミング言語の処理系の一種で、高水準言語によるソースコードから、機械語あるいは元のプログラムよりも低い水準のコードに変換するプログラムである。

コンパイラは次のフェーズによってオブジェクトプログラムを生成する。

  1. 字句解析:定数や識別子,演算子,予約語などの構成要素(トークン)に分解する。
  2. 構文解析:トークンのリストをプログラミング言語の仕様に基づき文法的に正しいのかチェックする
  3. 意味解析: 定数や関数の宣言と使用時の対応,型や引数のチェックをする。
  4. 最適化:中間コードを変形して、効率のよいプログ ラムに変換する。
× 全体としての実行回数が変わらなければ、実行時間を短くすることはできない。
すなわち、繰り返し回数が多いループは繰り返し回数事態を削減するようにする。
× 除算命令より加算命令の方が高速に実行できる。
すなわち、この置き換えは速度低下を招く。
コンパイラの最適化には「変数の定数化」がある。
処理中は値が変化しない変数を定数に置き換えることで、変数の読み込みのオーバヘッドを省略し、メモリへのアクセス時間を削減して高速化を図ることができる。
× サブルーチンの呼び出しにはオーバヘッドが伴う。
この置き換えも速度低下を招く可能性がある。

キーワード