在可执行文件中data段、text段、rodata段都不存局部变量,那没有加载到内存的栈之前,局部变量到底存在哪呢?

在可执行文件中data段、text段、rodata段都不存局部变量,那没有加载到内存的栈之前,局部变量到底存在哪呢?
还是说可执行文件和可重定位目标文件里面有一个区叫做栈区?

1个回答

局部变量放在堆栈上,函数没有执行的时候,对应的局部变量根本不存在。

之所以要用堆栈,是因为有递归的存在,因此局部变量是可以存在不确定的多个副本的,所以随用随开,随不用随收。
比如
int sum(int n)
{
if (n == 1) return 1;
int x = sum(n - 1);
return x + n;
}
这段代码,每次递归,都要开一个空间存储x,如果你传入的n是100,需要100个空间,传入的n是1000,需要1000个空间。所以肯定事先是没办法先分配好的,只能随着程序运行,不断把递归内的变量放入堆栈,在函数执行后,又把这些内存释放。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问