Cプログラムの初期化されていないメモリ位置の物理メモリの場所?

私は、Cの初期化されていないグローバル変数がメモリの.bssセクションを占めることを読んだ。また、それは単なるプレースホルダーであり、オブジェクトファイル内のスペースを隠すことはありません。

私の質問は、初期化されていないグローバル変数にある値を割り当てたら、物理メモリにどこに格納されるのでしょうか?

例えば:

int a[100];

int main()
{
    a[10] = 25;
}

上記のプログラムでは、メモリの場所はどこに割り当てられますか?

1
まったくメモリモデルを持っていないことに気付くかもしれません。
追加された 著者 Johannes Rudolph,

2 答え

グローバル変数が格納される場所は実装定義であり、C標準は保存場所を定義しません。
C標準は、Bssセグメントやデータセグメントについては言及していません。

7
追加された
それでも、BSSとデータセグメントは、物理メモリではなく仮想メモリ内の場所です。
追加された 著者 Fred Foo,

あなたの誤解は、BSSが "永久にゼロ"のメモリだと思っていると思います。 暗黙的にゼロのプログラムロードマッピングの一部であるため、ディスク上に物理ストレージが存在しないようにしていますが、そうでなければ標準のプライベートな書き込み可能マッピングであり、

動くことを考えているなら、仮想アドレスと物理アドレスを混同しているかもしれません。 Cのオブジェクトの仮想アドレスは決して変更されず、物理アドレスは決してあなたには見えず、決して重要ではありません。

4
追加された