局部变量存放在栈区, 局部变量脱离其作用域时能够自动释放。
问题时局部变量的内存空间在哪里分配!?
进程的栈上
正确答案是线程的栈上。说成进程的栈是错误的(不存在进程的栈的概念,只有进程的虚拟空间概念,也就是通常的那个 4G 空间),进程包含多个线程可以认为是线程的逻辑分组的概念。线程才是资源调度的基本单位,每个线程具有自己独立的栈。所以你的代码是由一个线程在运行,例如如下代码:
void foo()
{
int a;
...
}
这时 a 位于执行这个函数的线程的栈上。被编译成机器码时 a 的具体表现方式是 [ebp 或 esp + offset] 的形式。