基本情報技術者 2018年 春期 午前(科目A) 問18
問題文
コンパイラによる最適化の主な目的はどれか。
選択肢
ア:プログラムの実行時間を短縮する。(正解)
イ:プログラムのデバッグを容易にする。
ウ:プログラムの保守性を改善する。
エ:目的プログラムを生成する時間を短縮する。
🔒 解説は解答すると表示されます
コンパイラ最適化【午前解説】
正解の理由
正解は ア です。コンパイラ最適化とはソースコードから生成される機械語(目的プログラム)の実行効率を高めるための変換を指します。典型的な最適化は命令の再配列、共通式の除去、ループ不変コードの移動、デッドコードの削除、レジスタ割付の改善などで、いずれも実行時間や実行時資源の消費を削減することを目的とします。したがって「プログラムの実行時間を短縮する」ことが主目的です。
解法ステップ
- 問題文から「コンパイラによる最適化」が何を指すかを確認する(実行時の振る舞い改善が対象)。
- 各選択肢を「目的(何を達成するか)」の観点で評価する。
- 最も典型的で広義に当てはまるのは「実行時間短縮」であることを選ぶ。
選択肢別の誤答解説
- ア: 正解。コンパイラ最適化は命令数やメモリアクセスを削減して実行時間やメモリ使用を改善します。
- イ: 誤り。デバッグを容易にするのは主目的ではありません。逆に最適化によりデバッグが難しくなる場合があります(最適化により変数やコード位置が変わる)。
- ウ: 誤り。保守性はソースコードの設計・可読性に依存し、コンパイラ最適化は生成コードを改善するもので保守性向上が目的ではありません。
- エ: 誤り。目的プログラム(生成時間)を短縮するのはコンパイル高速化の話であり、最適化処理自体はむしろコンパイル時間を増やすことがあるため目的ではありません。
よくある誤解
- 「最適化=デバッグ支援」:最適化はコードの構造を変えるためデバッグを困難にすることがあり、容易にする目的ではありません。
- 「最適化は保守性を高める」:最適化後の機械語は可読性・保守性を高めるものではなく、可読性はむしろ低下します。
- 「コンパイル時間短縮が主目的」:最適化は実行時性能重視で、コンパイル時間短縮は別の観点(ビルド最適化)になります。
補足コラム
コンパイラ最適化は「静的最適化」と「動的最適化(JITなど)」に分かれます。静的最適化はコンパイル時に行い、長い最適化処理で高効率コードを生成することが多いです。一方、JITは実行時の情報を利用して最適化するため、実行パターンに応じたより適切な最適化が可能です。ただし、いずれも主目的は実行効率(時間・メモリ・電力など)の改善です。
FAQ
Q. 最適化レベルを上げると必ず速くなりますか?
A. 多くの場合速くなりますが、特定のアーキテクチャや状況では最適化が逆効果になることもあり、測定が重要です。
A. 多くの場合速くなりますが、特定のアーキテクチャや状況では最適化が逆効果になることもあり、測定が重要です。
Q. 最適化は安全ですか(意味が変わらないか)?
A. コンパイラは言語仕様を守る範囲で変換しますが、未定義動作に依存するコードでは最適化により動作が変わることがあるため注意が必要です。
A. コンパイラは言語仕様を守る範囲で変換しますが、未定義動作に依存するコードでは最適化により動作が変わることがあるため注意が必要です。
Q. コンパイル時間が長くなるなら最適化は無意味ですか?
A. 開発時は最適化を抑えてビルド速度重視、リリース時に高最適化というワークフローが一般的です。実行効率が重要な場面では最適化は有益です。
A. 開発時は最適化を抑えてビルド速度重視、リリース時に高最適化というワークフローが一般的です。実行効率が重要な場面では最適化は有益です。
関連キーワード: コンパイラ最適化、コード最適化、実行時間短縮、静的最適化、JIT最適化

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

