在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存储在哪里?根据激活记录逻辑。
[globals通常在call stack上通常不存在(用于保存呼叫帧或激活记录)。
C11规范不需要任何调用堆栈。通过阅读n1570进行检查。某些实现不使用任何调用堆栈(或激活记录)。
阅读linkers and loaders了解更多。
在Linux上,尝试cat /proc/self/maps
了解运行该cat
命令的进程的虚拟地址空间