Avi*_*mar 1 c++ stack function-calls execution
我有以下代码:
int func(int a)
{
int b=2;
int c,d,e,f,g;
//some code which involves a,b,c,d,e,f,g
}
int main()
{
int s=3;
func(s);
}
Run Code Online (Sandbox Code Playgroud)
现在发生的事情是当main开始执行时:
1.
它将s推入堆栈
2.它调用func()
3.func()将b,c,d,e,f,g推送到堆栈
4.现在当代码涉及时执行a,b,c,d,e,fg,以便知道必须弹出func()的所有局部变量的值.然后检索一个值.现在如果再次使用bcdefg,它们的值将如何被检索(因为它们已被弹出)?
局部变量以及参数实际上并没有被压入堆栈.相反,编译器添加代码来更改堆栈指针足以适应所有变量,然后在引用局部变量时,编译器具有从堆栈指针的偏移量中获取值的代码.
我建议您查看示例程序的汇编器输出以了解它的工作原理.