IPA過去問ドリル

平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問11

テクノロジ/ソフトウェア

コンパイラによる最適化において,オブジェクトコードの所要記憶容量が削減できるものはどれか。

出典:平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問11

正解:イ

解説

コンパイラの最適化技法のうち,関数のインライン展開やループのアンローリングは,呼出しやループ制御のオーバヘッドを減らして実行速度を高める一方で,同じコードが展開・複製されるためオブジェクトコードのサイズはむしろ増加する傾向があります。また,ループ内不変式の移動(ループ不変コードの外出し)は,実行速度の改善が主目的であり,コードサイズにはほとんど影響しません。これに対し,定数の畳込み(定数畳み込み,constant folding)は,コンパイル時に計算できる定数式をあらかじめ計算しておき,実行時にその計算を行うコード自体を生成しないようにする最適化であるため,生成されるオブジェクトコードの命令数が減り,所要記憶容量の削減につながります。

選択肢ごとの解説

  • 誤り。関数のインライン展開は,呼出し先の関数の内容を呼出し元に展開して埋め込む最適化であり,同じコードが複数箇所に複製されるため,オブジェクトコードのサイズはむしろ増加する傾向があります。
  • 正しい。定数の畳込みは,コンパイル時に計算可能な定数式の結果をあらかじめ計算して置き換える最適化であり,実行時に計算するための命令が不要になるため,オブジェクトコードの所要記憶容量を削減できます。
  • 誤り。ループ内不変式の移動は,ループの実行速度を高めるための最適化であり,オブジェクトコードのサイズの削減を主目的とするものではありません。
  • 誤り。ループのアンローリングは,ループ制御のオーバヘッドを減らして実行速度を高めるために,ループ本体のコードを複数回分展開する最適化であり,オブジェクトコードのサイズはむしろ増加します。
エンベデッドシステムスペシャリストの過去問を演習モードで解く