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