平成31年 春期 エンベデッドシステムスペシャリスト 午前II 問11

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

 ア  関数のインライン展開  イ  定数の畳込み
 ウ  ループ内不変式の移動  エ  ループのアンローリング


答え イ


解説

 ア  関数のインライン展開は、プログラムの関数を呼び出したところに、関数内の処理を入れて動作としては関数へのジャンプをなくします。
これにより関数ジャンプ時のレジスタ対比時間などが短縮でき処理速度は上がりますが、オブジェクトのサイズは増えます。
 イ  定数の畳込みは、プログラム中の定数(デファインで定義されたものを含む)同士の計算式を、コンパイル時に計算してしまうことです。これにより、処理速度の向上と、オブジェクトサイズの削減ができます。
 ウ  ループ内不変式の移動、ループ処理の中でループ内からループの外に出しても処理内容が変わらないものを、ループ内に出すことです。
これにより処理速度は向上します。オブジェクトのサイズに影響はありません。
 エ  ループのアンローリングはループ処理をループしないベタな処理にすることです。
ループのジャンプ処理がなくなるだけ処理速度は向上しますが、オブジェクトのサイズは増えます。

※昔のコンパイラの最適化はあまりかしこくなかったのですが、最近の最適化は非常にかしこいです。
小賢しいアルゴリズム変更ややアセンブラ化による処理時間短縮をするくらいなら、最適化オプションを“速度重視”にするほうが手っ取り早く、効果があります。


キーワード
・コンパイラ

キーワードの解説
  • コンパイラ(compiler)
    プログラム言語で書かれたプログラムを、コンピュータで処理可能な形式(機械語)に変換するソフトウェア。
    機械語(マシン後)の形式はCPUのシリーズ毎に異なるため、コンパイラも異なる。
    コンパイラでの変換作業をコンパイル(compile)やビルド(build)と呼び、プログラム言語で書かれたプログラムをソースコード(source code)、コンパイラが生成するプログラムをオブジェクトコード(object code)と呼びます。
    コンパイラが動作しているマシン以外の機械語を生成するコンパイラのことをクロスコンパイラといいます。

もっと、「コンパイラ」について調べてみよう。

戻る 一覧へ 次へ