応用情報技術者試験 平成27年秋期試験午前問題 問19

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

(ア) 繰返し回数の多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。例えば,10,000回実行するループは,100回実行するループを100回繰り返すようにする。

(イ) 算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。例えば,"X+X"は"2*X"で置き換える。

(ウ) 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。

(エ) プログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。

正解 ウ
定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換えます。これを"定数の畳込み"といいます。

100回実行するループを100回繰り返すよりは、10000回実行するループに変換します。これを“ループのアンローリング"といいます。

乗算よりも加算のほうが高速に計算されるので、同じ結果が得られる演算では、加算で行うように変更します。これを"演算子強度低減"といいます。

サブルーチン化された処理は、呼出し元の位置にコピーして、サブルーチンの部分を削除します。これを"関数のインライン展開"といいます。

この問題の出題歴
* ソフトウェア開発技術者 H20秋期 問39

この記事が気に入ったらサポートをしてみませんか?