平成31年度 春期 午前Ⅱ 問11
開発ツール
最適化に関する問題
コンパイラによる最適化において,オブジェクトコードの所要記憶容量が削減できるものはどれか。
- ア関数のインライン展開
- イ定数の畳み込み
- ウループ内不変式の移動
- エループのアンローリング
答えと解説を見る
✓ これが正解イ定数の畳み込み
解説
定数の畳み込みは計算を前もって済ませ、命令そのものを減らします。
コンパイラの最適化には、速さのためにコードを増やすものと、コードそのものを減らせるものがあります。定数の畳み込みは、定数どうしの計算のように、コンパイル時に結果が決まる式をコンパイラが前もって計算し、その結果の値に置き換える最適化です。実行時に計算するための命令が要らなくなるので、オブジェクトコードが短くなり、所要記憶容量を削減できます。同時に実行も速くなります。ほかの三つは主に実行速度を上げるための工夫で、記憶容量は減らないか、かえって増えます。命令が消えるのか、命令を複製するのかで見分けるのがポイントです。
ほかの選択肢はなぜ違うのか
- ア関数のインライン展開:関数のインライン展開は、呼出し箇所に関数の本体を埋め込み、呼出しと戻りの手間を省く最適化です。呼び出す場所ごとに本体の写しが入るので、オブジェクトコードはむしろ大きくなりがちです。
- ウループ内不変式の移動:ループ内不変式の移動は、繰返しのたびに同じ結果になる計算をループの外へ出し、一度だけ計算するようにするものです。実行回数が減って速くなりますが、命令の量そのものはほとんど変わりません。
- エループのアンローリング:ループのアンローリングは、ループの本体を何回分か並べて書き、繰返しの判定や分岐の回数を減らす最適化です。本体を複製するので、速さと引き換えにオブジェクトコードは大きくなります。
出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問11
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)