私は、Cの初期化されていないグローバル変数がメモリの.bssセクションを占めることを読んだ。また、それは単なるプレースホルダーであり、オブジェクトファイル内のスペースを隠すことはありません。
私の質問は、初期化されていないグローバル変数にある値を割り当てたら、物理メモリにどこに格納されるのでしょうか?
例えば:
int a[100]; int main() { a[10] = 25; }
上記のプログラムでは、メモリの場所はどこに割り当てられますか?
グローバル変数が格納される場所は実装定義であり、C標準は保存場所を定義しません。 C標準は、Bssセグメントやデータセグメントについては言及していません。
あなたの誤解は、BSSが "永久にゼロ"のメモリだと思っていると思います。 暗黙的にゼロのプログラムロードマッピングの一部であるため、ディスク上に物理ストレージが存在しないようにしていますが、そうでなければ標準のプライベートな書き込み可能マッピングであり、
動くことを考えているなら、仮想アドレスと物理アドレスを混同しているかもしれません。 Cのオブジェクトの仮想アドレスは決して変更されず、物理アドレスは決してあなたには見えず、決して重要ではありません。