extern 変数について読みましたが、そのメモリ割り当てに関連する答えが見つかりませんでした。
int a; // file 1
extern int a; // file 2
ここで、ファイル 1 は、またはファイル 2 にメモリを割り当てます。データ セグメント内またはスタック内 ?
ありがとう。
extern キーワードは「定義せずに宣言する」という意味です。つまり、変数を明示的に宣言する方法、または定義なしで宣言を強制する方法です。
では、file2
定義なしで変数を宣言しただけです (メモリが割り当てられていません)。ではfile1
、タイプ の変数を宣言および定義しましたinteger
。ここでは、初期化されていないグローバル(C 用)があるため、 BSS セグメントにメモリを割り当てました。
C++ では、グローバルはプロセスごとのデータ領域に格納されます。
宣言と定義の違い:
外部変数が extern キーワードにどのように関連するかを理解するには、変数の定義と宣言の違いを知る必要があります。
変数が定義されると、コンパイラはその変数にメモリを割り当て、場合によってはその内容を何らかの値に初期化します。変数が宣言されている場合、コンパイラは変数を別の場所で定義する必要があります。
宣言は、その名前と型の変数が存在することをコンパイラーに通知しますが、コンパイラーはその変数が別の場所に割り当てられているため、その変数にメモリーを割り当てる必要はありません。