C语言-函数栈帧(每次调用函数,开辟函数的大概流程)

news2024/12/28 5:43:19

思路:

  1. emm,有点懵,这一块,只知道个大概,如果后期我深挖的话,我再回头来补充
  2. 上图
  3. 括号的位置,便是每次创建,调用函数的时候,所产生的函数栈帧,也可以理解为每次调用函数,在电脑里开辟的一块空间,
  4. 这空间实际就是一个栈,ebp栈底指针,esp栈顶指针,他俩就这么一框,就画了一个区域,随后ebs,edi,ebi这三个是初始化栈的,从edi直到ebp,就给区域内的内容刷新为CCCCCC了,也就是通常所说的乱码了,
  5. 而这些工作完成后,才开始函数内部变量空间的创建,这个图,下面是高地址,下面是低地址,每个编译器不一样,因此划分块也不一样,用ebp-8,也就是底部高地址,减去8字节,这个为这个变量空间的起始地址。
  6. 而函数运行时,是向下获取数据,即挨着该函数区域的下面,这就可以解释为什么,递归的时候,每次递归的值不同,因为每次递归后,新的递归值,就会被创建一个空间,然后压到栈顶,随后再创建下一个递归的函数。
  7. 而每次进入递归,都是一块崭新的空间,这个空间干什么事,不干其他函数空间什么事,他们互不干扰,除非,你想要最后return值,想从内部获得什么值,最后回归的时候,带回来。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(五)Qt 动态手势识别“左右滑动”以及实现翻页效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 (一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现 (二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆…

Spring Boot 中的 SockJS

Spring Boot 中的 SockJS 在 Spring Boot 中,SockJS 是一个用于实现 WebSocket 的兼容性解决方案。本文将介绍 SockJS 的原理、使用方法和示例代码。 什么是 SockJS SockJS 是一种浏览器与服务器之间的通信协议,它可以在浏览器和服务器之间建立一个基于…

python--tornado服务

一、前言 Tornado是一个基于非阻塞I/O的Web框架,具有可以处理大量并发连接,适用于高并发的场景的高性能,轻量级和异步支持的优点。 本篇主要展示了使用 tornado http post 和 get 服务 二、代码 tornado http post 和 get 服务 # -*- codin…

视频拼接融合产品的产品与架构设计(一)

1视频拼接产品概述 将多达8个视频拼接在一起,拼成上帝视角的大图,并且可以共享最终生成的画面。 1.1 三维方案 三维方案是我在晚上思考的时候无意想到,这种方案应该是最接近事实的方案,多个画面应该是在三个维度,x&…

智慧产业园区管理系统主要包含哪些

智能设备管理 本文介绍的是智慧产业园区管理系统中的智能设备管理。智能设备管理是智慧产业园区管理系统中的重要组成部分,它可以为企业提供高效、智能化的设备管理服务。通过智能设备管理系统,企业可以对设备进行实时监控和在线运维,及时发…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么? 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念,也就是说只要有Javascript代码运行,那么它就一定是运行在执行上下文中 执行上下文的类型分为三种: 全局执行上…

2023年智慧水利综合解决方案,数字孪生,领导驾驶舱,水文监测

导读:原文《2023年智慧水利综合解决方案》共56页PPT(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式: 如需获取…

C++数据结构笔记(4)企业链表的实现(Linux内核链表)

1.企业链表本质上是一种Linux内核链表。 2.最本质的区别在于,传统的结点类型中直接同时包含了指针域和数据域,用来实现和其他结点之间的串联;而在企业链表中,结点本身只含有指针域,而数据部分的具体实现则在测试文件中…

细数 List 的10个坑,保证你一定遇到过!

List 在实际的业务开发中,使用的非常频繁,但同样也有不少的坑,一旦使用不当,就可能带来一系列的问题;今天我们主要来说一说这些问题,以及面对这些坑的时候我们要怎么解决。 Arrays.asList转换基本类型数组…

深度学习----第J2周:ResNet50V2算法实现

深度学习----第J2周:ResNet50V2算法实现 文章目录 深度学习----第J2周:ResNet50V2算法实现前言一、ResNetV2与ResNet结构对比二、模型复现2.1 Residual Block2.2 堆叠的 Residual Block2.3 ResNet50V22.4 查看模型结构2.5 tf下全部代码 三、Pytorch复现3…

有哪些数据分析的工具?

来了,9款大数据&数据分析工具推荐,分享点和别人不一样的。 一、基于 Apache Hudi 的 Onehouse https://www.onehouse.ai 近日,开源大数据项目 Apache Hudi 创始人 Vinoth Chandar 发文官宣基于 Hudi 构建的商业公司和产品 Onehouse&…

Linux +Docker镜像打包导出,上传至内网服务器

1. docker容器打包成镜像和压缩 (1)首先查看镜像所在的容器,获取到容器id docker ps -a(2)将容器保存成镜像 sudo docker commit -a yjw e007d8b7e1b7 my_projectv2:v2sudo:以管理员权限运行命令&#x…

Unity快速上手系列1之:2D物理弹球

大家好。 以“跳一跳”为开端,微信小游戏从前几年起以迅雷不及掩耳盗铃儿响叮当之势席卷了用户的手机。从创意小游戏,到页游遗风的挂机游戏,一时间百花齐放。 当然,前者说是创意,其实绝大部分也就是直接把其他平台上的…

5.8.2 TCP报文段首部格式

5.8.2 TCP报文段首部格式 TCP报文段首部格式在很大程度上体现了TCP协议的功能 一、数据封装过程 如图 应用层报文传送到传输层之后,加上TCP报文段的首部构成了TCP数据传送单位,我们称之为TCP报文段。在发送时TCP报文段是作为IP数据报的数据部分&#…

linux虚拟内存管理

目录 虚拟内存分布 进程虚拟内存空间的管理 内核如何划分用户态和内核态虚拟内存空间 内核如何管理虚拟内存区域 定义虚拟内存区域的访问权限和行为规范 关联内存映射中的映射关系 虚拟内存区域在内核中是如何被组织的 程序编译后的二进制文件如何映射到虚拟内存空间中 …

探索图像处理的利器——OpenCV

目录 引言: 一、OpenCV简介: 二、OpenCV的特点: 三、OpenCV的应用领域: 四、实际案例: 结论: 引言: 在当今信息化的时代,图像处理已经成为了日常生活中不可或缺的一部分。从社…

4742. 电(acw每日一题)

来源:Google Kickstart2022 Round H Problem C 题目描述 某城市有 N个电力节点,编号 1∼N。 这些电力节点形成的电力网络,可以看作一个 N 个节点 N−1 条边的连通图。 每个电力节点都有一个固定的电容,其中第 i 个节点的电容为…

CSS 备忘录-基础内容

目录 1、CSS的基本结构 2、样式表的来源以及优先级 3、选择器的优先级 4、源码顺序 5、px、em、rem单位 6、视口相对单位 7、使用 calc() 来定义属性值 8、一些无单位的属性 9、自定义属性 10、使用 JavaScript 来动态修改自定义属性 11、overflow 属性 12、子元素…

【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

文章目录 定时器1_定时中断定时器2_定时中断定时器3_定时中断定时器4_定时中断定时器5_定时中断 高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): 定时器1_定时中断 TIM1是高级定时器,使用的时钟总线是R…

bochs编译安装

编译命令 ./configure --prefix‘/usr/local/bochs2.7’ --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 make sudo make install 配置文件 bochsrc # configuration file generated by Bochs plugin_ctrl: unmapped1, biosde…