【C语言】深度理解函数---函数的栈帧

     C语言函数是如何调用的呢?初学时我想当然地回答:从调用部分转到函数部分逐句执行,就是那么简单啊,然而你有没有想过····
     函数调用前需要做哪些准备工作?函数是如何传参的?传参后又是如何使用的?参数使用完后又是如何销毁的?调用的整个过程是怎样的呢??


今天就通过下面这个简单的代码带大家走进函数的世界,一探究竟~


#include<stdio.h>
int Add(int x,int y)
{
int z=0;
z=x+y;
return z;
}
int main()
{
int a=10;
int b=20;
int ret=Add(a,b);
printf("ret=%d\n",ret)
}

上面这个加法函数的使用,想必大家一眼就能看懂,然而转到反汇编可以看到下面那么多的代码。。。有没有突然就懵逼了呢?_?想象中简单的调用为何变得如此复杂?这都是在搞什么嘞??(懵逼脸)

1.main函数开辟空间

     每次函数调用都会开辟一块内存空间,该程序也不例外,接下来让我们先看一下具体是如何开辟空间的。下面这幅图是MAINCRTStartup调用main函数并初始化以及main函数栈帧的具体过程:
     为main函数开辟空间并初始化

2.Add函数的调用

          通过上面的步骤已经为main函数开辟好了空间,接下来进行Add函数的调用,具体流程如下图所示:
          Add函数的调用

3.Add函数栈帧的销毁

          下图是Add函数调用完成后,Add函数栈帧的销毁过程
          Add函数栈帧的销毁

           到这里函数的栈帧具体过程就介绍完了,通过上面三幅图大家有没有对函数栈帧有一个清晰的认识呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值