【发布时间】:2020-03-06 12:53:06
【问题描述】:
在 C 中,每个函数都有一个激活记录,该记录分配在堆栈帧上。局部变量分配在它们自己的函数的激活记录中。那么,全局变量是怎么回事呢?它们分配在哪里?
例如
#include <stdio.h>
int a;
void v()
{a= 2;
int b;
b++;
}
main()
{
int f;
printf("\n%d",a);
v();
}
-----Activation record----
-------------------
-------------------
activation record for main
-------------------
int f
-------------------
-------------------
activation record of v
--------------------
int a
--------------------
int b
--------------------
---------------
变量x根据激活记录逻辑存放在哪里?
【问题讨论】:
-
全局变量不存储在“激活记录”(或“堆栈帧”)中。那是存储自动(或本地)变量的地方。但是,C 标准并没有规定变量的存储位置,只规定了它们应该如何工作。它没有提到术语“堆栈”、“堆”或“激活”。
-
通常全局变量存储在所谓的数据段中。它是内存的一部分,在链接过程中映射到变量,并且在运行时不会更改。它在加载时分配在实际内存中。
标签: c global-variables activation-record