平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問11
テクノロジ/ソフトウェアコンパイラによる最適化において,オブジェクトコードの所要記憶容量が削減できるものはどれか。
出典:平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問11
- ア関数のインライン展開
- イ定数の畳込み
- ウループ内不変式の移動
- エループのアンローリング
正解:イ
解説
コンパイラの最適化技法のうち,関数のインライン展開やループのアンローリングは,呼出しやループ制御のオーバヘッドを減らして実行速度を高める一方で,同じコードが展開・複製されるためオブジェクトコードのサイズはむしろ増加する傾向があります。また,ループ内不変式の移動(ループ不変コードの外出し)は,実行速度の改善が主目的であり,コードサイズにはほとんど影響しません。これに対し,定数の畳込み(定数畳み込み,constant folding)は,コンパイル時に計算できる定数式をあらかじめ計算しておき,実行時にその計算を行うコード自体を生成しないようにする最適化であるため,生成されるオブジェクトコードの命令数が減り,所要記憶容量の削減につながります。
選択肢ごとの解説
- ア誤り。関数のインライン展開は,呼出し先の関数の内容を呼出し元に展開して埋め込む最適化であり,同じコードが複数箇所に複製されるため,オブジェクトコードのサイズはむしろ増加する傾向があります。
- イ正しい。定数の畳込みは,コンパイル時に計算可能な定数式の結果をあらかじめ計算して置き換える最適化であり,実行時に計算するための命令が不要になるため,オブジェクトコードの所要記憶容量を削減できます。
- ウ誤り。ループ内不変式の移動は,ループの実行速度を高めるための最適化であり,オブジェクトコードのサイズの削減を主目的とするものではありません。
- エ誤り。ループのアンローリングは,ループ制御のオーバヘッドを減らして実行速度を高めるために,ループ本体のコードを複数回分展開する最適化であり,オブジェクトコードのサイズはむしろ増加します。