【问题标题】:Extern variable memory location and Compile/Run time behaviour外部变量内存位置和编译/运行时行为
【发布时间】:2019-10-26 06:18:59
【问题描述】:

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

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

【问题讨论】:

  • 请显示与相关变量相关的代码。在函数中分配的变量不是文件范围。
  • 你不要extern函数局部变量。
  • 外部变量需要是全局变量。链接器安排所有目标文件连接到变量的同一内存位置,就像它为函数所做的那样。
  • 谢谢大家,@Barmar 的解释增加了你的解释

标签: c compilation runtime extern compile-time


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多