スタティックがどこに行くかは、ゼロで初期化されているかどうかによって異なります . ゼロ初期化 静的データは .BSS (Block Started by Symbol) に入り、非ゼロ初期化 データは .DATA に入ります
プログラムがメモリにロードされると、さまざまなセグメントに編成されます。セグメントの 1 つは DATA セグメント です .データ セグメントはさらに 2 つの部分に分割されます。
初期化されたデータ セグメント: すべてのグローバル、静的、定数データはここに保存されます。
初期化されていないデータ セグメント (BSS): 初期化されていないデータはすべてこのセグメントに格納されます。
この概念を説明する図を次に示します。
これらの概念を説明する非常に良いリンクは次のとおりです。
実際、変数はタプルです (ストレージ、スコープ、タイプ、アドレス、値):
storage : where is it stored, for example data, stack, heap...
scope : who can see us, for example global, local...
type : what is our type, for example int, int*...
address : where are we located
value : what is our value
ローカル スコープは、定義されている場所に応じて、翻訳単位 (ソース ファイル)、関数、またはブロックのいずれかに対してローカルであることを意味します。変数を複数の関数から見えるようにするには、確実に DATA または BSS 領域のいずれかになければなりません (明示的に初期化されているかどうかによって異なります)。その後、ソース ファイル内のすべての関数または関数のいずれかに応じてスコープが設定されます。