函数栈帧的创建和销毁

2023-11-04

函数栈帧的创建和销毁





一. 困惑

前期学习的时候,我们可能会有很多困惑?

比如:

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


二. 详解

  1. 寄存器
    要理解函数栈帧,就要理解ebp和esp寄存器
    ebp,esp这两个寄存器中存放的是地址,这两个地址是用来维护函数栈帧的。


  1. 图解

在这里插入图片描述


在这里插入图片描述


  1. 细节探讨
    (暂时没空,有空再更新)


三. 解惑

局部变量是怎么创建的?

先为函数分配好栈帧空间,初始化好之后,再为局部变量分配一些空间。

如图:

在这里插入图片描述


为什么局部变量的值是随机值?

因为局部变量在声明时并没有被初始化,值是随机放进去的。
如图:

在这里插入图片描述


函数是怎么传参的?传参的顺序是怎样的?

当我们还没有调用的时候,就通过push从右向左把参数压栈。在进入函数后,通过指针偏移量,找到形参。

如图:

在这里插入图片描述


形参和实参是什么关系?

形参是实参的一份拷贝,值是相同的,地址不同。


函数调用是结束后怎么返回的?

在调用之前,就把call指令下一条指令的地址压栈,当函数要返回的时候弹出ebp就能够找到原始上一个函数调用的ebp,然后指针往下走就能找到esp的地址回到栈帧空间。返回值通过寄存器带出来



本篇博客为本人学习C语言时的详细笔记,如有错误之处,还望各位指正。
文章为原创,如要转载请注明出处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数栈帧的创建和销毁 的相关文章

  • npm 安装、删除依赖命令

    npm安装依赖 npm install xxx 利用 npm 安装xxx依赖到当前命令行所在目录 npm install xxx g 利用npm安装全局依赖xxx npm install xxx save 安装并写入package json
  • 抖音视频根据用户ID下载方法

    在这说一下我提取抖音视频的方法 1 首先是抖音视频我不是从APP上抓取的 因为对应用户视频列表抓取链接存在字段加密 无法获取我的视频信息获取步骤如下 1 通过访问登录新抖微信小程序 采用fiddler对其进行抓包 获取到根据用户名搜索的AP
  • LevelDb之七:根据Key读取记录

    LevelDb之七 根据Key读取记录 2012 09 08 17 54 41 分类 云计算 LevelDb是针对大规模Key Value数据的单机存储库 从应用的角度来看 LevelDb就是一个存储工具 而作为称职的存储工具 常见的调用接
  • Javaweb 自定义 Servlet 实现按照访问路径转发

    前言 HttpServlet Service方法 提供的 doGet 和 doPost 方法只能根据请求方式进行分发 假设我们现在有多个服务 添加 删除 查询 每个服务都要对应一个 Servlet AddServlet DeleteServ
  • 圆柱体的投影特点_圆柱体三面投影作图方法分析

    摘要 工程制图作为一门重要的专业技术基础课 旨在培养学生的空间思维和读图 绘图的能力 结合工程制图的教学实践 指出了求圆柱截切体投影的关键是求其截交线的投影 明确了圆柱截交线的类型与投影方法 以多平面截切圆柱体产生的圆柱截切体为例 通过逐个

随机推荐

  • Flowable基本使用介绍和Flowable数据库表解释

    1 Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎 Flowable流程引擎可用于部署BPMN 2 0流程定义 用于定义流程的行业XML标准 创建这些流程定义的流程实例 进行查询 访问运行中或历史的流程实
  • MybatisPlus生成主键策略方法

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 解答:什么是卫星链路

    本文足对卫星链路预算做的一个最基本 简单 通俗的介绍 以期使普通读者都能够对链路预算有一个了解 有个概念 如感兴趣则需再深入学下去 就会将链路预算彻底搞明白 链路预算的目的和作用卫星链路预算的目的和作用 简单的讲就是帮助新用户经济合理地选配
  • 睿智的seq2seq模型4——往英文到法文的翻译里加上注意力机制

    睿智的seq2seq模型4 往英文到法文的翻译里加上注意力机制 学习前言 什么是注意力机制 如何将注意力机制应用到翻译中 英文翻译到法文的思路 1 对英文进行特征提取 2 将提取到的特征传入到decoder 3 将 t 作为起始符预测第一个
  • vue项目中使用可选链 ( ?. )和双问号 ( ?? )配置

    1 安装插件 babel plugin proposal optional chaining npm install save dev babel plugin proposal optional chaining 2 配置babel ba
  • 2017中国大学生程序设计竞赛 - 女生专场

    1 HDU 6023 点我看题 此链接为vjudge链接 题意 给出题目的数量 提交的次数 每次提交的题目编号 提交时间以及结果 其中罚时为每次错误提交20min 第一次成功提交的时间 问最后AC的题目数量以及总罚时 提交结果不存在CE 分
  • 宋浩概率论与数理统计-第六章-笔记

    概率论与数理统计 第六章 6 1 总体与样本 6 2 1 统计量的定义 6 2 2 常用统计量 6 3 1 抽样分布 2 chi 2 2分布
  • 在Linux上将作业提交到Yarn上运行报错Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES的解决办法

    楼主在Linux服务器上将作业提交到Yarn上报错 Caused by java io IOException Exceeded MAX FAILED UNIQUE FETCHES bailing out 经过网上的搜索以及自己的实验 解决
  • zabbix监控——监控主机

    目录 一 zabbix介绍 二 部署zabbix 2 1 server端部署 2 2 agent端部署 2 3 中文字体乱码设置 三 Zabbix API方式配置 一 zabbix介绍 1 zabbix是一个基于WEB界面的提供分布式系统监
  • 项目js文件修改后chrome不能及时更新的解决办法

    在做web开发过程中 经常需要调试js代码 而在这个时候我们修改过的代码可能不能生效 这是因为浏览器默认是有缓存的 但是这个时候缓存就会影响我们的调试工作 在这里就介绍一下chrome浏览器解决该问题的方法 方法一 调试前清除浏览器缓存 在
  • 浅谈为何选择Dubbo

    本文摘录至搜狐 个人觉得很值得已读 仅用于学习交流 1 为什么要做服务 编者的话 随着现在互联网行业的发展 越来越多的框架 中间件 容器等开源技术不断地涌现 更好地来服务于业务 实现业务并解决问题 然而面对众多的技术选择 我们要如何甄别出适
  • Zookeeper的Quorum机制-谈谈怎样解决脑裂(split-brain)

    在使用zookeeper的过程中 我们经常会看到这样一些说法 1 zookeeper cluster的节点数目必须是奇数 2 zookeeper 集群中必须超过半数节点 Majority 可用 整个集群才能对外可用 这个说法在大多数情况下是
  • C语言_自定义数据类型

    目录 1 自定义数据类型 结构体 1 1 结构体类型的声明 1 1 1 匿名结构体 1 2 结构体的自引用 1 2 1 Typedef结构体重命名 1 3 结构体变量的定义和初始化 1 4 结构体内存对齐 1 4 1 结构体的对齐规则 1
  • 文件下载本地测试OK,部署到环境上报错,原因是jar包中不能通过this.getClass().getClassLoader().getResource(““).getFile()获取

    修改之前获取资源目录下的文件 但是后面定位发现当前jar包中的资源文件这种方式访问不到 打印出来的目录都是带 的 后面在网上各种找 结果看完后凉凉 后面想用getResourceAsStream读成流形式 但是下载下来打不开 开始以为是还是
  • 【送书活动】网络安全(黑客)自学

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • ffmpeg实战教程(四)格式转换如MP4转MKV等

    知识延伸 I P B帧和PTS DTS的关系 基本概念 I frame 帧内编码帧 又称intra picture I 帧通常是每个 GOP MPEG 所使用的一种视频压缩技术 的第一个帧 经过适度地压缩 做为随机访问的参考点 可以当成图象
  • 训练loss不下降原因集合

    11年it研发经验 从一个会计转行为算法工程师 学过C c java android php go js python CNN神经网络 四千多篇博文 三千多篇原创 只为与你分享 共同成长 一起进步 关注我 给你分享更多干货知识 目录 一 t
  • 人工智能发展现状

    作者 Chen Zhang 链接 https www zhihu com question 20102212 answer 126994210 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 随着深度学习技术
  • 数组的浅拷贝与深拷贝

    文章目录 1 数据类型 2 浅拷贝与深拷贝 3 实现深拷贝方法 3 1 JSON string 结合 JSON parse 3 2 递归 4 JS 中的拷贝方法 4 1 concat 4 2 slice 4 3 展开运算符 4 4 Obje
  • 函数栈帧的创建和销毁

    函数栈帧的创建和销毁 目录 一 困惑 二 详解 三 解惑 一 困惑 前期学习的时候 我们可能会有很多困惑 比如 局部变量是怎么创建的 为什么局部变量的值是随机值 函数是怎么传参的 传参的顺序是怎样的 形参和实参是什么关系 函数调用是怎么做的