c - 外部变量内存位置和编译/运行时行为



我已经读了很多关于外部变量的文章,但似乎没有人适当地解决这个问题。如果我在 C 中声明并定义一个变量,它会在文件的该范围内分配内存。但在多文件模块化项目的后期阶段,该变量被声明为外部变量,该变量应将其存储在数据段中,以展示外部功能预期的全局行为。

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

其中一个编译单元必须将变量定义为全局变量。编译此文件时,将为数据段中的变量分配内存,类似于文件范围变量。不同之处在于变量在链接表中注册,以便其他对象文件可以找到它。

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

将所有对象文件链接

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

最新更新