リンカ・ローダと実行形式

リンカが行う再配置(リロケーション)の説明として正しいものはどれか。

  1. Aコードとデータの最終的な番地が決まった後、命令やデータの中の番地を正しい値に書き換える
  2. Bプログラムを実行中に、別のコンピュータへ移して続きを実行する
  3. Cメモリが足りなくなったとき、ページをストレージに追い出す
答えと解説を見る

正解:A. コードとデータの最終的な番地が決まった後、命令やデータの中の番地を正しい値に書き換える

コンパイラは各ファイルを番地0から始まるものとして作り、ほかのファイルの関数や自分の変数の番地を使う場所を再配置情報として記録します。リンカはすべてのファイルを並べて実際の番地を決めた後、記録された場所ごとに正しい番地(またはPCからの距離)を計算して命令に書き込みます。動的リンクでは、同じような書き換えの一部を実行時に動的リンカが行います。

  • A. 正しい。再配置情報の場所を書き換えます。
  • B. それはプロセスの移送(マイグレーション)です。
  • C. それはOSのページ置き換えです。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. C言語のプログラムをリンクしたときに「undefined reference to `foo'」(fooへの未定義の参照)というエラーが出た。最も考えられる原因はどれか。
  2. a.cとb.cの両方で、static を付けない同じ名前のグローバル関数 void init(void) を定義してリンクした。起こることとして正しいものはどれか。
  3. C言語で関数にstaticを付けて定義したとき(例: static int helper(void))の効果として正しいものはどれか。
  4. C言語で「extern int count;」と書いたときの意味として正しいものはどれか。
  5. Linuxなどでよく使われるELF形式のファイルについて正しいものはどれか。