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

C言語でファイルの外側に「int limit = 100;」と書いたグローバル変数は、一般にどのセクションに置かれるか。

  1. A.data(初期値のあるデータ)
  2. B.bss(初期値のないデータ)
  3. C.text(機械語)
答えと解説を見る

正解:A. .data(初期値のあるデータ)

0以外の初期値を持つグローバル変数や静的変数は.dataセクションに置かれ、その初期値がファイルの中に保存されます。プログラムを読み込むとき、この内容がそのままメモリに写されるので、mainが始まる時点でlimitは100になっています。.dataは実行中に書き換えられるので、読み取りと書き込みが許された領域になります。

  • A. 正しい。初期値100をファイルに持ちます。
  • B. .bssは初期値が0か、指定のない変数です。
  • C. .textはコードの領域です。
この分野を解く 分野ページへ

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

  1. .bssセクションの特徴として正しいものはどれか。
  2. C言語の「char *p = "hello"; p[0] = 'H';」を実行すると、多くの環境で異常終了する。その理由として正しいものはどれか。
  3. 上のグローバル変数のうち、一般に.bssセクションに置かれるものの組み合わせはどれか。
  4. C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。
  5. C言語のmallocで確保したメモリは、一般にプロセスのどの領域から取られるか。