リンカ・ローダと実行形式
.bssセクションの特徴として正しいものはどれか。
- A関数の局所変数を、呼ばれるたびに置く領域である
- B初期値のない(または0の)変数の領域で、ファイルには大きさだけを記録し、読み込み時に0で埋める
- C定数の文字列を置く、書き込みのできない領域である
答えと解説を見る
正解:B. 初期値のない(または0の)変数の領域で、ファイルには大きさだけを記録し、読み込み時に0で埋める
初期値を書かないグローバル変数や静的変数は、C言語の決まりで0から始まります。中身がすべて0なら、ファイルに0を並べて保存するのはむだなので、.bssセクションには大きさだけを記録し、ローダがメモリを確保して0で埋めます。例えば「static char buf[1000000];」があっても、実行ファイルは1MB大きくなりません。
- A. 局所変数はスタックに置かれます。
- B. 正しい。ファイルの大きさを節約できます。
- C. 定数は.rodataに置かれます。