8

我阅读了有关外部变量的信息,但没有找到与其内存分配相关的答案,我的问题是谁将为外部变量分配内存,以及在哪个内存段中。

int a; // file 1

extern int a; // file 2

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

谢谢。

4

2 回答 2

7

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

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

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


声明和定义的区别:

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

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

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

于 2013-08-02T06:29:25.760 回答
5

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

于 2013-08-02T06:20:49.520 回答