标准c ++程序执行期间的函数调用

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,它们的值将如何被检索(因为它们已被弹出)?

Som*_*ude 6

局部变量以及参数实际上并没有被压入堆栈.相反,编译器添加代码来更改堆栈指针足以适应所有变量,然后在引用局部变量时,编译器具有从堆栈指针的偏移量中获取值的代码.

我建议您查看示例程序的汇编器输出以了解它的工作原理.