【发布时间】:2014-12-05 08:51:47
【问题描述】:
来源:
func_1()
{
static int i = 10;
printf("%s : %d\n", __func__, i);
}
func_2()
{
static int i = 20;
printf("%s : %d\n", __func__, i);
}
main() {
static int i = 30;
func_1();
func_2();
printf("%s : %d\n", __func__, i);
}
输出:
func_1 : 10
func_2 : 20
main : 30
编译器如何根据函数区分数据段中的变量?
【问题讨论】:
-
不清楚你在问什么。你是在问编译器如何知道它在什么范围内?
-
如何编译器处理它没有指定,这取决于编译器。只要它的行为符合规定,真的很重要吗?
-
@DavidSchwartz 是的。另外,如何获取实际值。
-
就像使用 全局 静态变量一样,这些变量共享 相同 名称,但位于 不同 源文件中.它只是在每个变量前面加上一个唯一的前缀,然后再遍历代码并将它们转换为内存地址。这只是编译过程中的另一个阶段。
-
@JoachimPileborg 好的.. 处理取决于编译器。但是,如何管理数据段以获取数据?这也取决于编译器吗?
标签: c memory-management static