【问题标题】:How're static local variables differentiated by compiler or processor at run-time?编译器或处理器在运行时如何区分静态局部变量?
【发布时间】:2021-01-25 17:03:19
【问题描述】:

我听说静态和全局存储在同一个部分。如果这不是真的,就像全局变量一样,静态局部变量在代码卸载或程序退出之前不会从内存中删除。

考虑以下代码:

void f1() {
static int i;
...
...
}

void f2() {
static int i;
...
...
}

如果两个i 都在同一个部分,处理器将如何区分它们? 以及在调用函数时处理器如何加载相应的静态局部变量?

这个问题可以扩展到多文件全局静态变量。

【问题讨论】:

  • 处理器不知道名字,它知道地址。这两个地址是唯一的。
  • 在翻译过程中,编译器会跟踪有关变量的所有信息——它们的作用域、它们的存储类等——并且当它生成机器代码时,它会为@987654323 的每个实例创建唯一的位置@.

标签: c scope static sections


【解决方案1】:

每个变量都应该有自己独特的位置和范围!范围很重要,每个变量都有一个与之关联的范围。这就是将 f1 中的 int if2 中的 int i 分开的原因。所以你可以看到,因为这存在于普通变量中,所以同样适用于静态变量。

你的问题让我有些困惑,但我想我已经回答了。如果你问内存地址在哪里,那是没有办法预测的。

【讨论】:

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