平成26年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問10
テクノロジ/ソフトウェアコンパイラによる最適化において,オブジェクトコードの所要記憶容量が削減できるものはどれか。
出典:平成26年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問10
- ア関数のインライン展開
- イ定数の畳込み
- ウループ内不変式の移動
- エループのアンローリング
正解:イ
解説
定数の畳込み(constant folding)は,コンパイル時に計算できる定数式をあらかじめ計算し,実行時に必要な演算命令をオブジェクトコードから取り除く最適化です。実行時の演算命令が削減される分,オブジェクトコードの命令数,すなわち所要記憶容量を削減する効果があります。
選択肢ごとの解説
- ア誤り。関数のインライン展開は,呼び出し先の関数の内容を呼び出し元に展開して埋め込む最適化であり,呼び出し箇所の数だけコードが複製されるため,一般にオブジェクトコードのサイズは増加します。
- イ正しい。定数の畳込みは,コンパイル時に計算可能な式をあらかじめ計算して定数に置き換えることで,実行時の演算命令を削減し,オブジェクトコードの所要記憶容量を削減できます。
- ウ誤り。ループ内不変式の移動は,ループの外に不変な計算を移すことによって実行時間を短縮する最適化であり,主に実行速度の向上を目的とするもので,オブジェクトコードのサイズ削減を主目的とするものではありません。
- エ誤り。ループのアンローリングは,ループ本体を複数回分展開して繰返し制御のオーバーヘッドを減らし実行速度を向上させる最適化ですが,展開した分だけコードが複製されるため,一般にオブジェクトコードのサイズは増加します。