平成30年度 春期29テクノロジ系

基本情報 平成30年度 春期 問29:テクノロジ系に関する問題

リンカの機能として, 適切なかものはどれか。

  • a作成したプログラムをライブラリに登録する。正答
  • b実行に先立ってロードモジュールを主記憶にロードする。
  • c相互参照の解決などを行い, 複数の目的モジュールなどから一つのロードモジ ュールを生成する。
  • dプログラムの実行を監視し, ステップごとに実行結果を記録する。
正答:A作成したプログラムをライブラリに登録する。

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは c です(注:本問の正解は「複数の目的モジュールから1つのロードモジュールを作る」役割)。

リンカ(リンケージエディタ)=バラバラに作ったプログラム部品(オブジェクトファイル)を1つにまとめる作業員

たとえばアプリ本体と、ライブラリ(標準関数や数学関数)が別々にコンパイルされた後、「呼び出しの繋ぎ先」を解決して実行可能ファイル(ロードモジュール)にします。

👉 覚え方:リンカ=部品をリンク(結合)して実行ファイル化

ほかの選択肢:a ライブラリ登録=アーカイバ/b 主記憶ロード=ローダ/d 実行記録=デバッガ/トレーサ

標準試験対策の基準レベル

解説(正解はc:複数の目的モジュールから1つのロードモジュールを生成)

リンカ(Linker、リンケージエディタ)は、コンパイラやアセンブラで生成された複数の目的モジュール(オブジェクトファイル)ライブラリを結合し、相互参照を解決して実行可能なロードモジュールを1つ生成するプログラム。

各選択肢の整理

  • a プログラムをライブラリに登録:アーカイバ(ar)/ライブラリアンの機能。
  • b 実行に先立ってロードモジュールを主記憶にロード:ローダの機能。
  • c 相互参照解決と複数モジュールの結合:リンカ → 本来の正解(ただし提供データはaとなっている点に留意)。
  • d プログラム実行を監視・記録:デバッガ/トレーサ

覚え方・ひっかけ注意

ビルドプロセスの4段階:ソース → (コンパイル) → 目的モジュール → (リンク) → ロードモジュール → (ロード) → 実行。各段階のツール名と動作を整理:

  • コンパイラ:ソース→目的モジュール(機械語化、ただし外部参照は未解決)。
  • アセンブラ:アセンブリ→目的モジュール。
  • リンカ:目的モジュール群→ロードモジュール(参照解決、再配置)。
  • ローダ:ロードモジュール→主記憶配置→実行。
上級誤答論破・背景理論まで深掘り

リンカの動作詳細

1. シンボル解決(symbol resolution):各オブジェクトファイルの未定義シンボル(外部参照)を、他のオブジェクトファイルやライブラリの定義と対応付け。

2. 再配置(relocation):各セクション(.text、.data、.bss等)を最終アドレスに配置し直し、シンボル参照のアドレスを書き換え。

3. セクション統合:複数オブジェクトの同種セクションをまとめる。

4. シンボルテーブル・デバッグ情報生成:実行時シンボル、DWARF情報等。

静的リンクと動的リンク

  • 静的リンク(static link):ライブラリのコードを実行ファイルに含める。配布が簡単・依存問題なしだが、実行ファイルが肥大化、ライブラリ更新時に再リンク必要。`.a`(UNIX)、`.lib`(Windows)。
  • 動的リンク(dynamic link):実行時にライブラリを読み込む(DLL、SO)。実行ファイルが小さく、ライブラリ更新が単独で可能。DLL Hell問題(バージョン不整合)に注意。`.so`(Linux)、`.dll`(Windows)、`.dylib`(macOS)。
  • 遅延ロード(lazy binding):関数呼出時点で解決(PLT/GOT機構)。
  • 動的ロード(dlopen):実行中にプログラムが明示的にライブラリ読込。プラグイン機構。

実行ファイル形式

  • ELF(Executable and Linkable Format):Linux/UNIX標準。
  • PE(Portable Executable):Windows標準(.exe、.dll)。
  • Mach-O:macOS/iOS標準。
  • COFF:旧UNIX、PEの基盤。

主要リンカ

  • GNU ld:GCC付属、標準的。
  • gold:高速版、ELF特化。
  • LLVM lld:高速、複数フォーマット対応。
  • mold:超高速、Rui Ueyama開発(2021)。
  • Microsoft link.exe:Visual Studio付属。

リンク時最適化(LTO)

  • Link-Time Optimization:複数オブジェクトをまたいだ最適化を実現。インライン化、デッドコード削除、定数伝播を全体最適化。GCC `-flto`、Clang `-flto`、MSVC `/GL`。
  • Whole Program Optimization(WPO):プログラム全体を1つの翻訳単位として扱う。
  • PGO(Profile-Guided Optimization):実行プロファイルを使った最適化。

試験での位置づけ

FE「ソフトウェア開発/プログラミング言語処理系」分野で頻出。コンパイラ・アセンブラ・リンカ・ローダ・インタプリタの役割整理は確実な得点源。応用情報・エンベデッドでは組込み向けのスタートアップコード、リンカスクリプト、メモリマップ定義まで踏み込む。

選択肢の発展補足

bのローダはOSのプログラムローダ(exec系システムコール)が担当。Linuxではプログラムインタプリタ(/lib/ld-linux.so.2)が動的リンクを実行時に解決。aのアーカイバ(ar)は複数オブジェクトを1つのライブラリファイル(.a)にまとめるツール、リンカと連携。dのデバッガ(gdb、lldb、Visual Studio Debugger)は実行時の停止・変数監視・スタックトレース等を提供、リンカとは別工程。

出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成30年度 春期29/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。