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

.bssセクションの特徴として正しいものはどれか。

  1. A関数の局所変数を、呼ばれるたびに置く領域である
  2. B初期値のない(または0の)変数の領域で、ファイルには大きさだけを記録し、読み込み時に0で埋める
  3. C定数の文字列を置く、書き込みのできない領域である
答えと解説を見る

正解:B. 初期値のない(または0の)変数の領域で、ファイルには大きさだけを記録し、読み込み時に0で埋める

初期値を書かないグローバル変数や静的変数は、C言語の決まりで0から始まります。中身がすべて0なら、ファイルに0を並べて保存するのはむだなので、.bssセクションには大きさだけを記録し、ローダがメモリを確保して0で埋めます。例えば「static char buf[1000000];」があっても、実行ファイルは1MB大きくなりません。

  • A. 局所変数はスタックに置かれます。
  • B. 正しい。ファイルの大きさを節約できます。
  • C. 定数は.rodataに置かれます。
この分野を解く 分野ページへ

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

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