資格暗記無料で始める

コンパイラの最適化とは?

コンパイラの最適化とは、コンパイラが、意味を変えずに生成コードを速く・小さくするために行う変換。組込み開発では、速度を狙う最適化と容量を狙う最適化が相反する点が重要になる。定数の畳込み(コンパイル時に確定する式を先に計算して定数へ置き換える)と共通部分式の除去は命令そのものを消すのでコードが小さくなる。一方、関数のインライン展開(呼出しを本体の複製で置き換える)とループのアンローリング(繰返しの本体を複数回分展開する)は、呼出しや分岐の手間を省く代わりにコードを複製するので大きくなる。ループ内不変式の移動は、繰返しのたびに値が変わらない計算をループの外へ出すもので、実行回数は減るが命令数はほぼ変わらない。

エンベデッドシステムスペシャリスト試験の過去問では2回出題されています(2016年度〜2019年度)。

こんぱいらのさいてきか

エンベデッドシステムスペシャリスト試験の頻出用語/午前II/別名:定数の畳込み、定数の畳み込み、定数畳込み、インライン展開、ループのアンローリング、ループアンローリング、ループ内不変式の移動


コンパイラの最適化の意味

コンパイラが、意味を変えずに生成コードを速く・小さくするために行う変換。組込み開発では、速度を狙う最適化と容量を狙う最適化が相反する点が重要になる。定数の畳込み(コンパイル時に確定する式を先に計算して定数へ置き換える)と共通部分式の除去は命令そのものを消すのでコードが小さくなる。一方、関数のインライン展開(呼出しを本体の複製で置き換える)とループのアンローリング(繰返しの本体を複数回分展開する)は、呼出しや分岐の手間を省く代わりにコードを複製するので大きくなる。ループ内不変式の移動は、繰返しのたびに値が変わらない計算をループの外へ出すもので、実行回数は減るが命令数はほぼ変わらない。

コンパイラの最適化の具体例

for (i=0;i<100;i++) a[i] = 60*60*24 + b; をコンパイルすると、60*60*24 は定数の畳込みで86400に置き換わり、乗算命令が3つ消える。さらに +b がループ内不変ならループ外へ移動される。一方、この繰返しを4回分ずつ展開するアンローリングを掛けると、分岐は1/4に減るが本体の命令列は約4倍に膨らむ。

コンパイラの最適化は試験でどう引っ掛けられる?

「最適化=小さくなる」と一括りにしないこと。記憶容量を減らせるのは定数の畳込みのように命令を消す種類だけで、インライン展開とループアンローリングは容量を増やす方向に働く。ROM容量が厳しい組込み機器で速度重視の最適化を掛けると入りきらなくなる、という形で問われる。

コンパイラの最適化と関連する用語

コンパイラの最適化が出た過去問

最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。