答え イ
【解説】
ア |
関数のインライン展開は、プログラムの関数を呼び出したところに、関数内の処理を入れて動作としては関数へのジャンプをなくします。これにより関数ジャンプ時のレジスタ対比時間などが短縮でき処理速度は上がりますが、オブジェクトのサイズは増えます。 |
イ |
定数の畳込みは、プログラム中の定数(デファインで定義されたものを含む)同士の計算式を、コンパイル時に計算してしまうことです。
これにより、処理速度の向上と、オブジェクトサイズの削減ができます。 |
ウ |
ループ内不変式の移動、ループ処理の中でループ内からループの外に出しても処理内容が変わらないものを、ループ内に出すことです。これにより処理速度は向上します。
オブジェクトのサイズに影響はありません。 |
エ |
ループのアンローリングはループ処理をループしないベタな処理にすることです。
ループのジャンプ処理がなくなるだけ処理速度は向上しますが、オブジェクトのサイズは増えます。 |
※昔のコンパイラの最適化はあまりかしこくなかったのですが、最近の最適化は非常にかしこいです。
小賢しいアルゴリズム変更(やアセンブラ化)による処理時間短縮をするくらいなら、最適化オプションを“速度重視”にするほうが手っ取り早く、効果があります。