[C][栈帧]详细讲解

目录

  • 1.栈帧
    • 1.进程地址空间
    • 2.栈帧说明
  • 2.认识相关寄存器
  • 3.认识相关汇编命令
  • 4.过程理解
  • 5.栈帧总结
  • 6.补充


1.栈帧

1.进程地址空间

请添加图片描述
.进程地址空间

2.栈帧说明

  • 调用函数,形成栈帧
  • 函数返回,释放栈帧
  • 局部变量是存放在栈区上的
  • 栈区内存的使用习惯是
    • 先使用高地址空间,再使用低地址空间
    • 如:数组随着下标的增长,地址是由低到高变化的

2.认识相关寄存器

  • eax:通用寄存器,保留临时数据,常用于返回值
  • ebx:通用寄存器,保留临时数据
  • ebp:栈底寄存器
  • esp:栈顶寄存器
  • eip:指令寄存器,保存当前指令的下一条指令的地址

3.认识相关汇编命令

  • mov:数据转移指令
  • push:数据入栈,同时esp栈顶寄存器也要发生改变
  • pop:数据弹出至指定位置,同时esp栈顶寄存器也要发生改变
  • sub:减法命令
  • add:加法命令
  • call:函数调用,1. 压入返回地址 2. 转入目标函数
    • 将当前指令的下一条指令入栈(push到栈中,影响ESP)
    • 跳转到目标函数起始地址处运行(修改EIP,到达目标函数)
  • jump:通过修改eip,转入目标函数,进行调用
  • ret:恢复返回地址,压入eip,类似pop eip命令

4.过程理解

  • 起步,main()也是要被调用的
    请添加图片描述

  • main()也要形成栈帧结构
    请添加图片描述

  • 起步
    请添加图片描述

  • 开始调用

    • 调用call
      请添加图片描述

    • 调用call
      请添加图片描述

    • 整体图解
      请添加图片描述

  • 形成栈帧
    请添加图片描述

  • 释放栈帧
    请添加图片描述

  • 释放临时拷贝,彻底释放空间
    请添加图片描述


5.栈帧总结

  • 调用函数,需要先形成临时拷贝,形成过程是从右向左
  • 临时空间的开辟,是在对应函数栈帧内部开辟的
  • 函数调用完毕,栈帧结构被释放掉
  • 临时变量具有临时性的本质:栈帧具有临时性
  • 调用函数是有成本的,成本体现在时间和空间上,本质是形成和释放栈帧有成本
  • 函数调用,因拷贝所形成的临时变量,变量和变量之间的位置关系是有规律的(地址连续)

6.补充

  • 堆上都是动态分配,做不到静态分配
  • 栈既可以静态分配,也可以动态分配
    • 静态分配 – 在函数体中创建了一个变量
    • 动态分配
      • 头文件<malloc.h>下,有一个void* __cdecl alloca(size_t)
      • 作用与malloc等类似,但是它申请的是“栈(stack)”空间的内存
      • 用完会在退出栈时自动释放,无需手动释放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671215.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之实现“通讯录”

大家先赞后看&#xff0c;养成好习惯 你们的点赞和关注还有收藏就是我的动力&#xff01;&#xff01;&#xff01; 目录 前言 一、通讯录文件的创建和联系人结构体定义 1.1 文件创建 1.2 联系人结构体定义 二、通讯录的功能实现 2.1通讯录初始化 2.2通讯录销毁 2.3添…

使用手机小程序给证件照换底色

临时遇到一个需求&#xff0c;需要给证件照换底色。原始图像如下 最终需要换成红底的。 本次使用一款小程序&#xff02;泰世茂证件照&#xff02;&#xff0c;打开该小程序&#xff0c;如下图所示 单击开始制作&#xff0c;然后选择二寸红底&#xff0c;如下图所示 然后单击相…

【AIGC时代】探索AIGC的无限可能:释放你的创意,定制你的视觉世界

前言 在数字时代的浪潮中&#xff0c;我们的视觉体验正在经历前所未有的变革。随着科技的飞速发展&#xff0c;我们不再满足于传统的图片制作方式&#xff0c;而是渴望拥有更具创意、更富个性的视觉呈现。在这样的背景下&#xff0c;AIGC&#xff08;人工智能生成内容&#xf…

IF:83.5!一作兼通讯,​Nature系列综述:可以吃的机器人!

在当今科技与生物工程快速融合的时代&#xff0c;传统领域之间的界限正在逐渐模糊&#xff0c;创造了许多前所未有的创新机会。机器人设计与食品加工这两个看似无关的研究领域&#xff0c;正在通过材料特性、制造工艺和功能的交叉融合&#xff0c;展现出巨大的潜力。 可食用机器…

Flutter 验证码输入框

前言&#xff1a; 验证码输入框很常见&#xff1a;处理不好 bug也会比较多 想实现方法很多&#xff0c;这里列举一种完美方式&#xff0c;完美兼容 软键盘粘贴方式 效果如下&#xff1a; 之前使用 uniapp 的方式实现过一次 两种方式&#xff08;原理相同&#xff09;&#xff1…

【TB作品】MSP430F5529,单片机,电子秒表,秒表

硬件 MSP430F5529开发板7针0.96寸OLED /* OLED引脚分配 绿色板子DO(SCLK)------P4.3D1(DATA)------P4.0RES-----------P3.7DC------------P8.2CS------------P8.1 */ 程序功能 该程序是一个用C语言编写的&#xff0c;用于msp430f5529微控制器上的简单电子秒表应用。它使用…

多源 BFS 详解

目录 一、多源与单源的区别 二、例题练习 2.1 例题1&#xff1a;01 矩阵 2.2 例题2&#xff1a;飞地的数量 2.3 例题3&#xff1a;地图中的最高点 2.4 例题4&#xff1a;地图分析 一、多源与单源的区别 单源最短路问题如何解决已经在上篇博客给出BFS 解决最短路问题&am…

Qt | Qt 资源简介(rcc、qmake)

1、资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件(前面所讨论的数据都存储在外部设备中)。若应用程序始终需要一组特定的文件(比如图标),则非常有用。 2、资源系统基于 qmake,rcc(Qt 的资源编译器,用于把资源转换为 C++代码)和 QFile …

Java扩展机制:SPI与Spring.factories详解

一、SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不…

【车载开发系列】汽车开发常用工具说明

【车载开发系列】汽车开发常用工具说明 【车载开发系列】汽车开发常用工具说明 【车载开发系列】汽车开发常用工具说明一. CANbedded二. Davinci Configurator Pro三. Davinci Developer-AUTOSAR软件组件设计工具四. MICROSAR五. MICROSAR OS六. CANdelaStudio七. Volcano VSB八…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议&#xff0c;在传输之前需要形成三次握手形成会话 只有会话形成了&#xff0c;服务端和客户端才能想发送数据&#xff0c;在创建会话的过程中&#xff0c;服务端和客户…

【计算机毕业设计】353微信小程序零食批发交易管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

如何进行时间管理

1.一项调查显示&#xff0c;每个人在睡觉上花费的平均时间大约为25年&#xff0c;这无疑是非常重要的。但排名第二的项目却让人大跌眼镜——看电视是8.3年。接下来分别是工作7.5年、吃饭6年、等待和家务各5年、身体护理4.1年、做白日梦4年&#xff0c;等等。 远远落后的是读书时…

ChatTTS+Python编程搞定语音报时小程序

文字转语音神器Python编程搞定语音报时小程序 今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/]&#xff0c;如下图所示&#xff1a; 这个开源项目可以从github.com上下载…

[数据集][目标检测]轮胎检测数据集VOC+YOLO格式439张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;439 标注数量(xml文件个数)&#xff1a;439 标注数量(txt文件个数)&#xff1a;439 标注类别…

智慧商砼搅拌车安监运营管理的创新实践

随着城市化进程的加速&#xff0c;商砼搅拌车作为城市建设的重要设备&#xff0c;其安全管理与运营效率直接关系到工程质量和施工进度。近年来&#xff0c;通过引入先进的4G无线视频智能车载终端套件&#xff0c;我们实现了对商砼搅拌车的高精度定位、实时音视频调度、实时油量…

队列——一种操作受限的线性表

队列 队列&#xff08;Queue&#xff09;简称队&#xff0c;也是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff0c;删除元素称为出队或离队。队列中的元素是先进先出&#xff08;Fir…

C++设计模式-桥接模式

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 29. 桥接模式 桥接模式将抽象与实现分离&#xff0c;使二者可以独立地变化。 应用&#xff1a;如在游戏开发中&#xff0c;多个角色和多个武器交叉组合时。可以使用桥接模式&#xff0c;定义角色抽象类&#xff0c;武器抽象…

注册北京个体工商户条件和办理时间

在北京这座充满活力的城市中&#xff0c;每天都有无数的创业者怀揣着梦想&#xff0c;踏上创业之路。然而&#xff0c;对于许多初次接触企业注册的人来说&#xff0c;往往对注册流程和时间感到困惑。特别是选择代理服务时&#xff0c;更希望了解一个大概的时间范围。那么&#…