外部变量存储位置和编译/运行时行为

时间:2019-06-11 19:04:17

标签: c compilation runtime extern compile-time

我已经阅读了很多有关extern变量的信息,但是似乎没有人适当地解决它。如果我在C中声明并定义了一个变量,它将获取在该文件范围内分配的内存。但是在多文件模块化项目的稍后阶段,该变量被声明为extern,应将其存储在Data段中以显示extern功能预期的全局行为。

所以我试图弄清楚如何以及何时分配内存,即extern变量的编译时间和运行时行为。

1 个答案:

答案 0 :(得分:3)

其中一个编译单元必须将变量定义为全局变量。编译此文件时,将为数据段中的变量分配内存,类似于文件作用域变量。区别在于该变量已在链接表中注册,以便其他目标文件可以找到它。

所有其他编译单元都使用extern关键字对其进行声明。这样可以防止它们为变量分配内存,并安排链接程序查找外部变量。

将所有目标文件链接在一起时,链接器会找到所有对该变量具有外部引用的目标文件,并将该链接连接到第一个目标文件中分配的内存。