软件运行原理 - 内存模型 - 栈内存

说明

  • C/C++软件运行时,内存根据使用方式的不同分为堆内存和栈内存,栈内存使用有以下特征:
  1. 栈内存使用(申请、释放)由系统自动分配和释放,程序员不用做任何操作。
  2. 栈内存重复使用,进入函数时数据入栈,函数执行完数据出栈。
  • 函数中的局部变量以及实参保存在栈内存中。

内存模型

image

  • 栈内存处于进程虚拟内存的高地址,从高往低扩展。
  • 堆内存处于进程虚拟内存的低地址,从低往高扩展。

原理

  • 在数据结构领域,栈是一种仅在尾部进行插入或删除操作的线性表,以后进先出的规则管理数据,先进入的数据被压入栈底,最后的数据在栈顶,压入数据叫做入栈,弹出数据叫做出栈。
  • 函数调用关系也是一种栈的形式,先进后出,第一个函数(main)最后执行完,末端函数最先执行完。
  • 因此使用栈的形式来管理函数调用中的临时内存使用(局部变量等)是非常合适的,而非临时的内存使用则需要通过另外一种方式(堆内存)来管理,所以系统将进程的虚拟内存划分为栈内存和堆内存。
  • 栈内存和堆内存本质上就是一块内存空间,只是不同的使用方式而已,对于编译器就是不同的使用规范。

操作单元

  • 入栈,出栈的操作单元并不是单个变量,而是整个函数,整个函数所需栈内存大小在编译时就能确认,入栈和出栈都是以整个函数需要的栈内存大小为单位一次性扩大/缩小栈内存空间。
  • 以及其它使用考量,例如:函数调用栈回溯等,操作单元不仅仅是函数临时变量(局部变量,实参等)所需的栈内存空间,编译器还会保存一些其它信息,例如:为了解决函数调用栈中间函数跳转问题,需要将LR保存在栈中。
  • 整个操作单元就叫做栈帧。

栈帧(Stack Frame)

  • 每一次函数调用,都会在栈内存上维护一个独立的栈帧(stack frame),栈帧大小是编译时确认的,就是该函数需要占多少栈空间.每个独立的栈帧一般包括:
  1. 函数参数
  2. 临时变量: 包括函数的非静态局部变量以及编译器自动生成的其他临时变量
  3. 函数调用的上下文,例如:帧指针(Frame Pointer)和返回地址(LR)等

入栈、出栈操作

  • 不同平台,函数调用的入栈和函数结束的出栈操作有细微差别,ARMV8平台操作。

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

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

相关文章

Axure安装及面板各区域详解

目录 一、Axure简介 二、Axure安装及使用准备 2.1 Axure官网 2.2 Axure授权 2.3 Axure汉化 2.4 设置RP文件保存路径 三、Axure菜单栏的使用 3.1 新建项目 3.2 新建元件库 3.3 自动备份设置 3.4 页面画布网格设置 四、Axure工具栏 4.1 选择模式 4.1.1 相交选中 4…

基于Qt的登录页面设计

题目: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…

CyclicBarrier、CountDownLatch、Semaphore 的用法

CyclicBarrier、CountDownLatch、Semaphore 的用法 CountDownLatch(线程计数器 ) CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执…

建筑可视化数据大屏汇总,UI源文件(PC端大屏设计)

酷炫的大屏设计让数据更好的展现,方便业务人员分析数据,辅助领导决策。现在分享大屏Photoshop源文件,以下为部分截图示意。 划重点:文末可获得完整素材包~ 01 科技建筑平台数据可视化 02 建筑公司可视化数据汇总平台 03 深蓝…

软件开发流程分析

软件开发流程分析 相关概念1 原型设计2 产品设计3 交互设计4 代码实现详细步骤 相关概念 前端:自研API,调用第三放API 后端:自研API,第三方API 数据库:Mysql,数据采集,数据迁移 服务器&#xf…

软件兼容性测试:保障多样化用户体验的重要功能

随着移动设备和操作系统的快速发展,软件兼容性测试变得越发重要。这项测试确保软件在不同平台、设备和环境下都能够正常运行,提供一致而稳定的用户体验。下面是软件兼容性测试中的一些关键功能: 1. 跨平台兼容性测试 在不同操作系统上运行的软…

Shopify二次开发之五:元字段(Metafields)

目录 解释 操作 1、添加Custom data 2、选择特定类型的数据 3、为Page配置元子段和值 4、模板访问 解释 Shopify Metafields 是一种用于存储和管理自定义数据的功能。它们允许商户在商城中的产品、订单、客户、Page等对象上添加自定义字段,以满足特定业务需求…

【计算机网络】应用层电子邮件协议

一、电子邮件系统架构 电子邮件是一个典型的异步通信系统,发送方从UA,也就是邮件客户端,通过应用层SMTP协议,传输层tcp协议,发送给发送方的邮件服务器,比如使用的是163邮箱,163提供的SMTP服务器…

3D民俗非遗全景云展馆更高效低投入地传承传统文化

在数字化时代,VR全景沉浸式展示方案成为各行业打造沉浸式展示的新玩法。云览互动为企业和机构提供专业的VR全景沉浸式展示方案,通过虚拟体验带来前所未有的沉浸感和视觉冲击,为用户带来全新的体验。 非遗虚拟VR云展平台是一种全新的物质文化遗…

【MATLAB】基于CEEMD分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于CEEMD分解的信号去噪算法(基础版) 代码流程图 代码效果图 获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复CEEMD去噪 本公众号致力于解决找代码难,写代…

卖家必看!亚马逊关联封店要怎么申诉?亚马逊防关联方法分享

不少亚马逊卖家为了能够提升产品销量,这个时候可能就会多开店铺,但是亚马逊会通过技术手段识别账号之间的关联性,一旦被检测到多个账号为同一卖家所有,这些账号就会被判定为关联,很多卖家遇到后都不知道怎么处理&#…

对象的生离死别

对象的生离死别 实验介绍 在构建一个类时,一般情况下需要编写构造函数、拷贝构造函数以及析构函数,这将直接影响程序的运行。而初始化列表是在调用构造函数时初始化参数的方式。 一个对象从实例化到销毁的历程: 知识点 内存分区构造函数exp…

IP定位数据可能不准的原因有哪些

IP定位数据可能不准的原因有多种,主要包括以下几个方面: 动态IP地址:一些互联网服务提供商(ISP)会为用户分配动态IP地址,这意味着用户的IP地址可能会随时间而变化。因此,数据库中的位置信息可能不时过时。 代理服务器…

视频如何提取文字?这四个方法一键提取视频文案

视频如何提取文字?你用过哪些视频提取工具?视频转文字工具,又称为语音识别软件,是一款能够将视频中的语音或对话转化为文字的实用工具。它运用了尖端的声音识别和语言理解技术,能精准地捕捉视频中的音频,并…

当视觉遇到毫米波雷达:自动驾驶的三维目标感知基准

​ 文章:Vision meets mmWave Radar: 3D Object Perception Benchmark for Autonomous Driving 作者: Yizhou Wang, Jen-Hao Cheng, Jui-Te Huang , Sheng-Yao Kuan , Qiqian Fu , Chiming Ni 编辑:点云PCL 欢迎各位加入知识星球,获取PDF…

Web安全-SQL注入【sqli靶场第11-14关】(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入&#xff0…

Q_GDW1819-2013电压监测装置协议结构解析

目录 一 专业术语二 基本功能2.1 基础功能2.2 数据存储2.3 显示功能(设备能够看到的)2.4 参数设置与查询2.5 事件检测与告警功能 三 其他内容3.1 通信方式3.2 通信串口 四 帧结构解析4.1 传输方式4.2 数据帧格式4.2.1 报文头(2字节&#xff0…

wvp gb28181 pro 配置https访问

准备工作 必须要有域名。虽然数字证书也有ip证书,但是会很麻烦,多数ca机构验证服务器需要用到80或443端口,也就是必须先备案,所以最好还是使用域名证书。购买域名证书。根据安全级别要求自行配置。单域名(不支持通配符的),阿里云的域名都是可以免费申请的。完成域名到服…

2024美赛备战1--数据处理(数据预处理,异常值处理,预测模型,插值拟合 *****必看****)

1.数据预处理 所谓数据预处理,就是指在正式做题之前对数据进行的一些处理。在有些情 况下,出题方提供的数据或者网上查找的数据并不能直接使用,比如缺少数据甚 至是异常数据,如果直接忽略缺失值,或者没发现异常数据&am…

Axure RP 9 入门教程

1. Axure简介 Axure 是一个交互式原型设计工具,可以帮助用户创建复杂的交互式应用程序和网站。Axure 能够让用户快速构建出具有高度可交互性的原型,可以在团队中进行协作、分享和测试。 使用 Axure 可以设计出各种不同类型的原型,包括网站、移…