我阅读了有关外部变量的信息,但没有找到与其内存分配相关的答案,我的问题是谁将为外部变量分配内存,以及在哪个内存段中。
int a; // file 1
extern int a; // file 2
这里文件1将为a或文件2分配内存。在数据段或堆栈中?
谢谢。
extern 关键字的意思是“声明而不定义”。换句话说,它是一种显式声明变量的方法,或者在没有定义的情况下强制声明。
所以在 中file2
,你只是声明了没有定义的变量(没有分配内存)。在file1
中,您声明并定义了一个类型为 的变量integer
。在这里,您在BSS 段上分配了内存,因为您有一个未初始化的全局(对于 C)。
在 C++ 中,全局变量存储在每个进程的数据区域中。
声明和定义的区别:
要了解外部变量如何与 extern 关键字相关,有必要了解定义和声明变量之间的区别。
定义变量时,编译器会为该变量分配内存,并可能还将其内容初始化为某个值。声明变量时,编译器要求在别处定义该变量。
该声明通知编译器存在具有该名称和类型的变量,但编译器不需要为它分配内存,因为它是在其他地方分配的。
在文件 2中声明了一个名为的整数类型变量a
(记住没有定义,即a
到目前为止没有内存分配)。我们可以根据需要多次执行此声明。在文件 1中,一个名为的整数类型变量a
已被声明和定义。(请记住,定义是声明的超集)。这里的内存a
也被分配了。