(Translated by https://www.hiragana.jp/)
.bss - Wikipedia

.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)に導入どうにゅうされた。

出典しゅってん脚注きゃくちゅう

編集へんしゅう
  1. ^ ただし、それが C89, C99 の仕様しよう要求ようきゅうされているわけではない。概念がいねんじょうの 0 やヌルポインタがハードウェアじょう・メモリじょうどのように表現ひょうげんされるかは実装じっそう依存いぞんとされている。ただし、概念がいねんじょうのヌルポインタや概念がいねんじょうの false は整数せいすうかたキャストしたら概念がいねんじょうの 0 にならないといけないとは規定きていされており、かたキャストして概念がいねんじょうの 0 となる集合しゅうごう規定きていされている。そして、そもそも bss セクションはC言語げんご仕様しようものではなく、コンパイラの慣習かんしゅうであり、bss セクションをあつかうようなコンパイラは、二進法にしんほうのハードウェアをあつかい、概念がいねんじょうの 0 はハードウェアじょうすべてのビットを 0 で表現ひょうげんしている。

関連かんれん項目こうもく

編集へんしゅう

参考さんこう文献ぶんけん

編集へんしゅう
  • Stevens, W. Richard (1992). Advanced Programming in the Unix Environment. Addison–Wesley. Section 7.6. ISBN 0-201-56317-7