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

Linuxなどの一般的なプロセスのメモリ配置を、番地の小さい方から並べたものとして正しいものはどれか。

  1. Aテキスト → データ → BSS → ヒープ → (空き) → スタック
  2. Bスタック → テキスト → ヒープ → データ → BSS
  3. Cヒープ → スタック → BSS → データ → テキスト
答えと解説を見る

正解:A. テキスト → データ → BSS → ヒープ → (空き) → スタック

典型的な配置では、番地の小さい側から機械語のテキスト、初期値のあるデータ、0で始まるBSSが並び、その上にヒープが番地の大きい方へ伸びます。スタックは番地の大きい側から小さい方へ伸び、両者の間の広い空き領域に共有ライブラリやmmapの領域が置かれます。実際の番地は、安全のためASLRによって実行のたびにずらされます。

  • A. 正しい。ヒープは上へ、スタックは下へ伸びます。
  • B. スタックは番地の大きい側に置かれます。
  • C. テキストは番地の小さい側に置かれます。
この分野を解く 分野ページへ

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

  1. プロセスのヒープとスタックを、間に広い空きをはさんで反対向きに伸ばす配置にする利点として正しいものはどれか。
  2. 静的リンクの説明として正しいものはどれか。
  3. 動的リンク(共有ライブラリ)の利点として正しいものはどれか。
  4. 動的リンクを使ったプログラムを別のコンピュータにコピーして実行したら、起動しなかった。最も考えられる原因はどれか。
  5. 静的ライブラリ(.aファイル)と一緒にリンクするとき、リンカが実行ファイルに組み込むものとして正しいものはどれか。