六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析

发布于:2022-10-21 ⋅ 阅读:(384) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言——六个问题

前期在学习C语言<函数>这一部分的时候,可能会有以下六个疑问
如果你可以轻松回答出来这六个问题,可以退出这篇文章啦
如果不可以,建议你花时间认真读一下这篇文章,一定会对你有所帮助。

1、局部变量是怎么创建的?
2、为什么局部变量的值是随机值?
3、函数是怎么传参的?传参的顺序是怎么样的?
4、形参和实参是什么关系?
5、函数调用时怎么做的?
6、函数调用结束后是怎么返回的?

提示:本人是IT小白!萌新!菜鸡!已经努力打磨这篇文章啦!如果有错误的地方欢迎各位大佬指正!如果喜欢这篇文章还烦请点赞转发支持一下! 那么以下就是本篇文章正文内容,下面案例可供参考

一、预备知识

1、寄存器相关知识

主要了解esp和ebp即可
在这里插入图片描述

2、常用汇编指令

在这里插入图片描述

3、栈区相关知识

如上图最后两行粉色字介绍

另做一些额外补充,防止有些小伙伴还不理解什么是压栈和出栈操作

push——压栈,压栈就是从栈顶存放数据
pop——出栈,出栈就是从栈顶出数据

栈区的数据全部遵循 “先进后出,后进先出”、“FILO”也就是“First In Last Out”,大家看可以把压栈出栈这种方式理解为子弹匣、堆盘子、进出电梯…

另外,栈顶是高地址,栈底是低地址

如果汇编指令不太能看懂也没关系,主要结合旁边的文字注释去理解即可!

二、详解函数栈帧的创建和销毁

下面拆分为10步解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、总结

以下是我自己总结的对于函数栈帧的创建和销毁的过程简述

在这里插入图片描述
看到这里,相比你对开头的六个问题已经有了比较清晰的答案了吧~

如果觉得这篇文章对你有帮助,烦请您点赞支持一下~

如果各位小伙伴有什么想法也欢迎在评论区讨论噢~

感谢!!

写在最后:累死自己,卷死舍友!!!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到