戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

エンベデッドシステムスペシャリスト 2019年 午前2 問11


問題文

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

選択肢

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

🔒 解説は解答すると表示されます

定数の畳み込み【午前2解説】

正解の理由

定数の畳み込みとは、コンパイル時に値が確定している定数式を計算し、その計算結果で置き換える最適化です。
例えば、3 * 4を実行時に計算する代わりに、コンパイル時に計算して12に置き換えます。これにより、オブジェクトコード中の演算命令を減らせる場合があります。そのため、所要記憶容量を削減できるものはイです。

解法ステップ

  1. 問題が尋ねているのは、実行時間ではなく、オブジェクトコードの記憶容量を削減する最適化です。
  2. 各選択肢について、コードを短くするか、逆に増やす可能性があるかを確認します。
  3. 定数式を計算結果に置き換えて命令を減らせる「定数の畳み込み」を選びます。

選択肢別の誤答解説

  • ア:関数のインライン展開
    関数呼出しをなくすために、関数本体を呼出し箇所へ展開する手法です。呼出しの実行時間を減らせることがありますが、関数本体が複数箇所にコピーされるため、オブジェクトコードの容量は増えやすくなります。
  • イ:定数の畳み込み
    コンパイル時に計算できる定数式を計算結果に置き換え、不要な演算命令を減らせます。オブジェクトコードの容量を削減できる可能性があります。
  • ウ:ループ内不変式の移動
    ループを繰り返しても値が変わらない計算を、ループの外へ移動する手法です。実行時の計算回数を減らせますが、主な目的は実行効率の向上であり、コード容量の削減とは限りません。
  • エ:ループのアンローリング
    ループの繰返し処理を展開し、ループ制御の処理を減らす手法です。ループ本体のコードを複製するため、オブジェクトコードの容量は増えやすくなります。

よくある誤解

  • 実行時間が短くなる最適化は、コード容量も小さくなる
    そうとは限りません。インライン展開やループのアンローリングは実行効率を高める一方で、コードを複製して容量を増やすことがあります。
  • ループ内不変式の移動は、処理を減らすのでコードも小さくなる
    減らすのは主にループ内での計算回数です。コード容量が必ず減るわけではありません。
  • 定数の畳み込みは、実行時の計算を速くするだけである
    実行時の計算を省けるだけでなく、演算命令を定数値に置き換えることで、コード容量も削減できる場合があります。

補足コラム

最適化の効果を考えるときは、「何を改善する手法か」を区別すると整理しやすくなります。定数の畳み込みは不要な演算をなくす最適化、ループ内不変式の移動は繰返し計算を減らす最適化、インライン展開やループのアンローリングは処理の実行効率を高める代わりにコード量を増やすことがある最適化です。

FAQ

定数の畳み込みでは、必ずオブジェクトコードが小さくなりますか?
必ずではありません。置換によって演算命令などを減らせる場合に、コード容量の削減につながります。
定数の畳み込みと定数伝播は同じですか?
異なる最適化です。定数の畳み込みは定数式を計算する手法で、定数伝播は変数に代入された定数を、その後の処理へ反映する手法です。両者は組み合わせて使われることがあります。

関連キーワード: 定数の畳み込み、コンパイラ最適化、インライン展開、ループ不変式移動、ループのアンローリング
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について