我已经阅读了很多有关extern变量的信息,但是似乎没有人适当地解决它。如果我在C中声明并定义了一个变量,它将获取在该文件范围内分配的内存。但是在多文件模块化项目的稍后阶段,该变量被声明为extern,应将其存储在Data段中以显示extern功能预期的全局行为。
所以我试图弄清楚如何以及何时分配内存,即extern变量的编译时间和运行时行为。
答案 0 :(得分:3)
其中一个编译单元必须将变量定义为全局变量。编译此文件时,将为数据段中的变量分配内存,类似于文件作用域变量。区别在于该变量已在链接表中注册,以便其他目标文件可以找到它。
所有其他编译单元都使用extern
关键字对其进行声明。这样可以防止它们为变量分配内存,并安排链接程序查找外部变量。
将所有目标文件链接在一起时,链接器会找到所有对该变量具有外部引用的目标文件,并将该链接连接到第一个目标文件中分配的内存。