ani*_*ani 0 c runtime compilation extern compile-time
我读过很多关于外部变量的内容,但似乎没有人适当地解决它。如果我在 C 中声明并定义一个变量,它会在文件的该范围内分配内存。但在多文件模块化项目的后期阶段,该变量被声明为 extern,该变量应将其存储在数据段中,以展示 extern 功能的全局行为。
所以我试图弄清楚如何以及何时分配内存,即 extern 变量的编译时和运行时行为。
编译单元之一必须将该变量定义为全局变量。编译该文件时,会为数据段中的变量分配内存,类似于文件作用域变量。不同之处在于变量被注册在链接表中,以便其他目标文件可以找到它。
所有其他编译单元都使用extern关键字声明它。这可以防止它们为变量分配内存,并安排链接器查找外部变量。
当您将所有目标文件链接在一起时,链接器会查找具有该变量的外部引用的所有目标文件,并将该链接连接到在第一个目标文件中分配的内存。