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

文章目录

  • 前言——六个问题
  • 一、预备知识
    • 1、寄存器相关知识
    • 2、常用汇编指令
    • 3、栈区相关知识
  • 二、详解函数栈帧的创建和销毁
  • 三、总结


前言——六个问题

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

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

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

一、预备知识

1、寄存器相关知识

主要了解esp和ebp即可
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第1张图片

2、常用汇编指令

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

3、栈区相关知识

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

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

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

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

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

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

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

下面拆分为10步解析

六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第3张图片
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第4张图片
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第5张图片
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第6张图片
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第7张图片
六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第8张图片

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

三、总结

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

六个问题检验是否真正理解“函数栈帧创建和销毁”——详细解析_第10张图片
看到这里,相比你对开头的六个问题已经有了比较清晰的答案了吧~

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

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

感谢!!

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

你可能感兴趣的:(C语言,c语言,1024程序员节)