为什么C使用堆栈来存储局部变量?这只是为了拥有独立的内存空间,或者一旦超出范围就具有自动清除所有局部变量和对象的功能?为什么windows使用堆栈来存储局部变量?
我身边一样,
问题1)如何局部变量从指令部分引用几个问题。考虑NewThreadFunc是由createThread函数调用的函数。
DWORD WINAPI NewThreadFunc(PVOID p_pParam)
{
int l_iLocalVar1 = 10;
int l_iLocalVar2 = 20;
int l_iSumLocalVar = l_iLocalVar1 + l_iLocalVar2;
}
堆栈这个主题应该是这样的,
| p_pParam |
| NewThreadFunc()|
| 10 |
| 20 |
| 30 |
| |
.
.
.
现在的问题是,在执行此功能将如何CPU知道局部变量的地址,(INT l_iSumLocalVar,l_iLocalVar1和l_iLocalVar2 )?这些变量不是他们存储地址的指针,他们必须从中获取值。我的问题是关于上面的堆栈。
问题2)如果此函数进一步调用任何其他函数,堆栈如何处理它?据我所知,堆栈会进一步分裂。如果这是真的,被调用函数的局部变量如何从被调用函数中隐藏起来。基本上局部变量如何维护范围规则?
我知道这些可能是非常基本的问题,但一些我怎么也想不到这些答案。
这与Windows有什么关系? – 2013-07-07 17:05:19
C没有指定(本地)变量的存储位置或方式,因此它不一定是堆栈。 – Kninnug
确实如此,但实际上每个实现都使用堆栈,因为这就是世界上所有硬件的工作原理。你知道有什么例外吗? –