将存储外部变量的内存以及由哪个文件存储

ana*_*and 8 c++ extern

我读到了关于extern变量,但没有找到与其内存分配相关的答案,我的问题是谁将为Extern变量分配内存,以及在哪个内存段中.

int a; // file 1

extern int a; // file 2
Run Code Online (Sandbox Code Playgroud)

这里文件1将为一个或一个文件分配内存2.在数据段或堆栈中?

谢谢.

Pie*_*aud 7

extern关键字表示"声明而不定义".换句话说,它是一种显式声明变量或强制声明而无需定义的方法.

所以file2,你刚刚声明了没有定义的变量(没有分配内存).在file1,您声明并定义了一个类型的变量integer.在这里,您在BSS段上分配了内存,因为您有一个未初始化的全局(对于C).

在C++中,全局变量存储在每进程数据区域中.


声明和定义之间的区别:

要了解外部变量与extern关键字的关系,有必要了解定义和声明变量之间的区别.

定义变量时,编译器为该变量分配内存,并可能还将其内容初始化为某个值.声明变量时,编译器要求在其他地方定义变量.

声明通知编译器存在由该名称和类型的变量,但编译器不需要为其分配内存,因为它是在其他地方分配的.


Hit*_*ani 5

在文件2中,a已经声明了一个被调用的整数类型变量(记住没有定义,即a到目前为止没有内存分配).我们可以根据需要多次进行此声明.其中在文件1被称为整数类型的变量a已被声明以及定义.(记住,定义是超级声明集).这里a也分配了内存.