問題
コンパイラによる最適化の主な目的はどれか。
キーボード:1〜4で選択・Enterで次へ
答え合わせ
- A
- B
- C
- D
自信の3択
えらぶと、この端末に記録します(登録はいりません)
解説
答えは a「プログラムの実行時間を短縮する」 です。
コンパイラは、人が書いたプログラムを機械語(目的プログラム)に翻訳するソフト。最適化は、翻訳するときに、意味を変えずにより速く動く(や、より小さくなる)ように工夫することです。
例:使わない計算を削る、ループの中で毎回同じ計算をしているものを外に出す、よく使う値をレジスタに置く、など。
👉 覚え方:「最適化=できあがったプログラムを速くする」。
ほかの選択肢:b デバッグはむしろ難しくなる(処理の順番が変わるため)/c 保守性はソースプログラムの書き方の話/d 最適化をするとコンパイルの時間はかえって長くなる。
なぜこれが正解か
正解は a。コンパイラの最適化は,プログラムの意味(実行結果)を変えずに,生成する目的プログラムの実行時間を短縮したり,使用するメモリ量を減らしたりする処理である。代表的な手法に,定数の畳込み,共通部分式の削除,ループ内の不変式の移動,ループ展開,インライン展開,レジスタ割付け,到達しないコードの削除などがある。
各選択肢の解説
- a 正しい:実行時間の短縮が最適化の主な目的。
- b 誤り:最適化によって命令の順序が入れ替わったり変数が削除されたりするため,デバッグはむしろ難しくなる。デバッグ時は最適化を弱めてコンパイルするのが一般的。
- c 誤り:保守性はソースプログラムの構造や書き方で決まり,コンパイラの最適化では改善されない。
- d 誤り:最適化の処理に時間がかかるため,目的プログラムを生成する時間(コンパイル時間)はかえって長くなる。
覚え方・ひっかけ注意
最適化は「実行時の性能」のためのもので,「コンパイル時の手間」や「人の作業(デバッグ・保守)」のためではない。gcc などでは -O0(最適化なし,デバッグ向き)から -O3(積極的な最適化)までレベルを選べる。
理論的背景
コンパイラ最適化はIR(Intermediate Representation、中間表現、典型はSSA: Static Single Assignment)上で実施される多段階処理。主要最適化:(1) 定数伝播(Constant Propagation)、(2) デッドコード除去(DCE: Dead Code Elimination)、(3) 共通部分式除去(CSE: Common Subexpression Elimination)、(4) ループ最適化(Loop Invariant Code Motion、Strength Reduction、Induction Variable Elimination、Loop Unrolling、Loop Fusion/Fission、Vectorization)、(5) インライン展開(Function Inlining)、(6) 末尾呼出し最適化(TCO: Tail Call Optimization)、(7) レジスタ割当(Graph Coloring、Linear Scan)。ピープホール最適化は機械語生成後の局所最適化。
実務での使われ方
LLVM(LLow Level Virtual Machine、Clang/Rust/Swiftが採用)はSSA IR + Pass Managerでモジュラな最適化フレームワークを提供。Profile-Guided Optimization(PGO、実行プロファイルに基づく最適化)、Link-Time Optimization(LTO、全モジュール横断最適化)、Auto-Vectorization(SIMD命令への自動変換)、Polyhedral Optimization(ループの多面体モデル)は現代の高度技法。JITコンパイル(Java HotSpot、V8、JVM、PyPy)はランタイム情報を活用したProfile-Guided最適化を動的に実施。AIコンパイラ(MLIR、TVM、XLA、TensorRT)はテンソル演算特化の最適化を行いGPU/TPU性能を引き出す。
試験での位置づけ
FE科目Aでコンパイラ最適化の目的識別が頻出。応用情報・エンベデッドシステムスペシャリストでは具体的な最適化技法、コンパイル過程(字句解析→構文解析→意味解析→中間コード生成→最適化→コード生成)、シンボルテーブル管理、レジスタ割当アルゴリズム、コード生成時の命令選択が問われる。情報処理安全確保支援士では最適化に伴うセキュリティ脆弱性(タイミング攻撃、データ消去のDCE)も題材。
選択肢の発展補足
関連話題:Undefined Behavior(C/C++の未定義動作、コンパイラが任意の最適化を行う根拠で、現代Cの大きな論点)/Memory Safety(Rust/Swiftの所有権モデル、生存時間解析)/WebAssembly(Wasm、ブラウザ・サーバサイド両用の中間バイナリフォーマット)/eBPF(カーネル内安全実行コード)。MLIR(Multi-Level Intermediate Representation、LLVM拡張)は深層学習・量子コンピューティング・FPGAなど多領域横断のコンパイラ基盤として注目。Mojo言語(Python互換+MLIR、超高速)、Carbon(C++後継候補、Google)など新興言語もコンパイラ技術の重要トピック。最適化はパフォーマンス面でAmdahl/Gustafsonの法則、Roofline Model(演算強度と帯域による性能上限分析)と組み合わせて評価される。FE午後の理論問題、応用情報のコンパイラ系問題で頻出領域。
出典と作り方
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成22年度 秋期 問22/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。

