.bss
.bssまたはbssとは、静的にアロケートされた変数のうちプログラムの開始時に0で初期化されているものを含むデータセグメント内の1つのメモリ領域に付けられた名前である。Unix系や Windows を含め、多くのコンパイラやリンカがこの名前を使う。bssセクションあるいはbssセグメントと呼ばれることも多い。
C言語では、初期化式なしで静的にアロケートされた変数は0(数値型の場合)かNULLポインタ(ポインタ型の場合)に初期化される。数値の0とNULLポインタは一般的なコンパイラではすべてのビットが0のビットパターンで表現される[注 1]。bssセクションは初期化式を持たないグローバル変数とstaticキーワードのついた初期化されていないローカル変数を含む。0からなるビットパターンで初期化される変数をbssセクションに割り当ててもよい。
通常、bssセクションに割り当てられたメモリはプログラムローダーがプログラムをロードするときに初期化する。main()
が実行されるより前にCランタイムシステムがbssセクションにマップされたメモリ領域をゼロで初期化する。ただし、必要時まで0で初期化するのを遅延するというテクニックを使ってOSがbssセクションを効率的に実装してもよい。
一部のABIはsbssセグメント(small bssの意)をサポートしている。このセグメントは、特定のアドレスしかアクセスできない命令を使ったコンパクトなコードからもアクセスできるデータ要素を含む。
BSSはBlock Started by Symbolというアセンブラの疑似命令に由来する。このアセンブラUA-SAPは1950年代にRoy Nutt、Walter Ramshawとその他のUnited Aircraft Corporationの人々によって開発された[要出典]。BSSというキーワードは、IBMの709および7090/94コンピュータのアセンブラFAT(FORTRAN Assembly Program)に導入された。
出典・脚注
編集関連項目
編集参考文献
編集- Stevens, W. Richard (1992). Advanced Programming in the Unix Environment. Addison–Wesley. Section 7.6. ISBN 0-201-56317-7