【发布时间】:2021-01-25 17:03:19
【问题描述】:
我听说静态和全局存储在同一个部分。如果这不是真的,就像全局变量一样,静态局部变量在代码卸载或程序退出之前不会从内存中删除。
考虑以下代码:
void f1() {
static int i;
...
...
}
void f2() {
static int i;
...
...
}
如果两个i 都在同一个部分,处理器将如何区分它们?
以及在调用函数时处理器如何加载相应的静态局部变量?
这个问题可以扩展到多文件全局静态变量。
【问题讨论】:
-
处理器不知道名字,它知道地址。这两个地址是唯一的。
-
在翻译过程中,编译器会跟踪有关变量的所有信息——它们的作用域、它们的存储类等——并且当它生成机器代码时,它会为@987654323 的每个实例创建唯一的位置@.