8

extern 変数について読みましたが、そのメモリ割り当てに関連する答えが見つかりませんでした。

int a; // file 1

extern int a; // file 2

ここで、ファイル 1 は、またはファイル 2 にメモリを割り当てます。データ セグメント内またはスタック内 ?

ありがとう。

4

2 に答える 2

7

extern キーワードは「定義せずに宣言する」という意味です。つまり、変数を明示的に宣言する方法、または定義なしで宣言を強制する方法です。

では、file2定義なしで変数を宣言しただけです (メモリが割り当てられていません)。ではfile1、タイプ の変数を宣言および定義しましたintegerここでは、初期化されていないグローバル(C 用)があるため、 BSS セグメントにメモリを割り当てました。

C++ では、グローバルはプロセスごとのデータ領域に格納されます。


宣言と定義の違い:

外部変数が extern キーワードにどのように関連するかを理解するには、変数の定義と宣言の違いを知る必要があります。

変数が定義されると、コンパイラはその変数にメモリを割り当て、場合によってはその内容を何らかの値に初期化します。変数が宣言されている場合、コンパイラは変数を別の場所で定義する必要があります。

宣言は、その名前と型の変数が存在することをコンパイラーに通知しますが、コンパイラーはその変数が別の場所に割り当てられているため、その変数にメモリーを割り当てる必要はありません。

于 2013-08-02T06:29:25.760 に答える