C语言函数调用的过程图解深入剖析

希望是美好的,也许是人间至善,而美好的事物永不消逝。——《肖申克的救赎》


目录

1、什么是函数栈帧?

2、理解函数栈帧能解决什么问题

3、函数栈帧是什么

3.1什么是栈?

3.2认识寄存器和汇编指令

4、函数调用的整个过程

5、main函数的栈帧形成过程

6、自定义函数栈帧形成过程

7、自定义函数返回到主函数


前言:

大家好,我是拳击哥。我们在编写程序时,会自定义一些函数,我们会用它来进行一些功能实现,那它在内存中的样子是什么呢,实参是如何传参给形参的呢?实际上自定义的函数是在栈区创建的一片空间,我们通过一些汇编指令来实现传参回参。今天我给大家带来的博文内容是什么是函数的栈帧,理解函数的栈帧能解决什么问题。并且理解函数栈帧的创建与销毁的过程。下面我就来详细解析。


1、什么是函数栈帧?

我们在编写程序的时候会自定义函数,自定义函数在调用时。会在内存中开辟一道空间那么这个空间就是该函数的栈帧(stack frame)。那么这些空间里面存放函数参数以及函数返回值,临时变量,保存上下文信息。我们来看一个图大致理解一下:


2、理解函数栈帧能解决什么问题

我们在理解函数栈帧后,以下几个问题就理解了:

  • 局部变量的创建过程
  • 为什么局部变量不初始化内容就是随机值
  • 函数调用的时候是如何传参的,顺序是怎样的
  • 函数的形参和实参是怎样实例化的
  • 函数的返回值能带回什么

3、函数栈帧是什么

3.1什么是栈?

栈(stack)是计算语言中最重要的概念之一,我们运行的每一个程序都是用了栈。如果没有栈就没有函数、局部变量、所有的C语言。

栈被定义为一种特殊的容器,用户可以将数据压入栈中(入栈,push),也可以将已经压入栈中的数据弹出(出栈,pop),但是栈这个容器必须遵守一条规则:先入栈的数据后出栈(First In Last Out, FIFO)。就像叠成一叠的书,先叠上去的书在最下面,因此要最后才能取出。

push:压栈,pop:出栈:

那么如果一块函数的栈帧经过push指令后 ,这块函数的栈帧会延申值最后一个push的指令上方。


3.2认识寄存器和汇编指令

1、寄存器

  • eax:通用寄存器,保留临时数据,常用于返回值
  • ebx:通用寄存器,保留临
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只爱打拳的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值