本文将简要叙述函数调用过程中栈桢的创建和销毁
将以下面的代码为例展开分析:
#include<stdio.h>
int Add(int x,int y)
{
int c=0;
c=x+y;
return c;
}
int main()
{
int a=12;
int b=20;
int ret=0;
ret=Add(a,b);
printf("ret=%d\n",ret);
return 0;
}
- 在进入main函数之前,先会调用mainCRTSTARTup函数,进入mian函数之后,汇编代码执行过程如下图所示:
注:ebp为栈底寄存器,esp为栈顶寄存器
以上汇编代码给main函数开辟栈空间,以及进行初始化,由内存可观察其相应地址的变化,如下图所示:
2.以下汇编代码进行的是变量的创建及Add函数的调用,此时将给Add函数开辟栈空间,并进行初始化
注:函数在传参时是从右向左依次进行
3.以下汇编代码进行的是函数内部的相关运算
下图为函数调用过程的整体示意图: