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