#include <stdio.h>
void func_a() {
static int a = 0;
a++;
printf("%d\n", a);

}
int main(int argc, char const *argv[])
{
func_a();
func_a();
return 0;
}
我想的是,函数func_a
在调用完一次之后,栈空间就被释放掉了。虽然静态变量a
仍然被保存在了某块内存中,但是,原来的栈空间保存的信息已经没了。那么问题就来了,第二次调用它是怎么知道这个变量a
所在的位置?而且它是怎么知道就是上次调用的那个变量a
?
虽然栈空间没了,但是函数的代码还在呀。
a
的地址是在代码段里写明的,它不是栈空间里的变量。函数是怎么知道
a
的位置?是编译器告诉它的。编译器把static a
放在数据段以后记下地址,函数里面用到a
的地方都编译成引用那个地址就好了。函数是怎么知道就是上次调用的那个变量?它知不知道没有关系。只要用那个数据段里面的地址的内容就好了。