-2

Cの静的変数とグローバル変数の両方がデータセグメント(未初期化または初期化済み)に格納されますが、静的変数のスコープはそのファイルまたはその関数のみであり、グローバル変数のスコープはプログラム全体であり、両方の変数の寿命はプログラム全体です実装方法。動作がどのように異なっていても、それらは同じセグメントに格納されます。

4

1 に答える 1

3

両方がデータ セグメントにある場合でも違いがあります。static変数には hasinternal linkageglobalhas 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)

于 2012-11-23T06:44:40.880 に答える