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

时间:2013-08-02 06:11:05

标签: c++ extern

我读到了外部变量,但没有找到与其内存分配相关的答案,我的问题是谁将为外部变量和内存段分配内存。

int a; // file 1

extern int a; // file 2

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

感谢。

2 个答案:

答案 0 :(得分:7)

  

extern关键字的意思是“声明而不定义”。换句话说,它是一种显式声明变量或强制声明而没有定义的方法。

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

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


声明和定义之间的区别:

  

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

     

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

     

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

答案 1 :(得分:5)

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