Cの静的変数とグローバル変数の両方がデータセグメント(未初期化または初期化済み)に格納されますが、静的変数のスコープはそのファイルまたはその関数のみであり、グローバル変数のスコープはプログラム全体であり、両方の変数の寿命はプログラム全体です実装方法。動作がどのように異なっていても、それらは同じセグメントに格納されます。
1 に答える
両方がデータ セグメントにある場合でも違いがあります。static
変数には hasinternal linkage
とglobal
has external linkage
(既定) があるため、現在の翻訳単位では static が表示されますが、他の翻訳単位では globals が表示されます。
変数を静的 (グローバル スコープ内) と宣言することにより、変数を現在のファイルのみに制限していることを意味します。
また、初期化された変数と初期化されていない変数は、2 つの異なるセグメントに格納されます
これは、プログラムのすべての変数とコードの実際のセグメンテーションです。
C99 Standard : 6.2.2 Linkages of identifiers
2
プログラム全体を構成する翻訳単位とライブラリのセットでは、特定の識別子の各宣言external linkage
は、同じオブジェクトまたは関数を示します。内one translation unit
では、 を使用した識別子の各宣言internal
linkage
は、同じオブジェクトまたは関数を示します。を使用した識別子の各宣言no
linkage
は、一意のエンティティを示します。
3
オブジェクトまたは関数のファイル スコープ識別子の宣言に storageclass 指定子が含まれているstatic
場合、識別子にはinternal linkage
.22)