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

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


問題文

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

選択肢

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

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

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

正解の理由

イの定数の畳込みは、コンパイル時に計算できる定数式をあらかじめ計算し、その結果に置き換える最適化です。
たとえば、実行時に計算する 3 + 4 を、コンパイル時に 7 として扱います。計算命令をオブジェクトコードに出力せずに済むため、オブジェクトコードの所要記憶容量を削減できる場合があります。

解法ステップ

  1. 問われているのは、実行速度ではなくオブジェクトコードの記憶容量を削減する最適化だと確認します。
  2. 各選択肢が、一般にコード量を増やすか、実行時の計算を減らすかを考えます。
  3. 定数式をコンパイル時に計算し、実行時の命令を減らせる定数の畳込みを選びます。

選択肢別の誤答解説

  • ア:関数のインライン展開
    関数呼出しを減らして実行速度を高める手法です。関数本体を呼出し箇所に展開するため、コード量が増え、オブジェクトコードの容量が大きくなることがあります。
  • イ:定数の畳込み
    定数だけで構成される式をコンパイル時に計算し、実行時の計算命令を省けます。コード量の削減につながるため、正解です。
  • ウ:ループ内不変式の移動
    ループの繰返し中に値が変わらない計算を、ループの外に移す手法です。実行時の計算回数を減らすのが主な目的であり、コード量の削減を直接狙うものではありません。
  • エ:ループのアンローリング
    ループの繰返し処理を展開し、ループ制御の処理を減らす手法です。実行速度の向上が期待できますが、命令を展開するため、コード量は増える傾向があります。

よくある誤解

  • 実行速度が向上する最適化なら、コード量も減る
    とは限りません。インライン展開やループのアンローリングのように、速度向上と引換えにコード量が増える手法があります。
  • 定数の畳込みは、定数をまとめて保存する最適化である
    という誤解があります。定数式をコンパイル時に計算し、実行時の計算命令を減らす最適化です。
  • どのプログラムでも必ず容量が減る
    とは限りません。実際の効果は、式や命令の形式、コンパイラの実装などによって異なります。

補足コラム

コンパイラの最適化には、実行時間を短くするもの、コード量を減らすもの、メモリ使用量を抑えるものなどがあります。問題で「何を改善する最適化か」を見極めることが、選択肢を絞るポイントです。
定数の畳込みのほか、同じ式を何度も計算しないようにする共通部分式の除去も、不要な命令を減らすことがあります。

FAQ

Q. 定数の畳込みでは、どのような式が対象になりますか?
A. コンパイル時点で値が確定している定数式です。たとえば、3 + 4 のような式が該当します。
Q. 関数のインライン展開は、なぜコード量が増えるのですか?
A. 関数呼出しを関数本体の命令列に置き換えるため、同じ関数を複数箇所から呼び出すと、その本体が複数箇所に展開されることがあるためです。

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

\ せっかくなら /

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

クイズ画面へ遷移する→

すぐに利用可能!

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

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