嵌入式学习笔记(59)内存管理之栈

news2024/11/8 4:50:28

1.6.1.什么是栈(Stack)

栈是一种数据结构,C语言中使用栈来存放局部变量

1.6.2.栈管理内存的特点(小内存、自动化)

先进后出 FILO(First In Last Out) 栈

先进先出 FIFO(First In First Out) 队列

栈的特点是入口即出口,只有一个口,另一个口是堵死的。所以先进去的必须后出来

队列的特点是入口和出口都有,必须从入口进,从出口出,所以先进去的必须先出来,否则就堵住后边的。

1.6.3.栈的应用举例:局部变量

C语言中的局部变量是用栈来实现的。

我们在C语言中定义一个局部变量时(int a),编译器会在栈中分配一段空间(4字节)给这个局部变量用(分配时栈顶指针会移动给出空间,给局部变量a用的意思就是,将这字节的栈内存的内存地址和我们定义的局部变量名a给关联起来),对应栈的操作是入栈。

注意:这里栈指针的移动和内存分配都是自动的。

然后等我们函数退出时,局部变量就会灭亡。对应栈的操作就是弹栈(出栈)。出栈时也是栈顶指针移动将栈空间中与a关联的那4个字节空间释放。这个动作也是自动的,不需要写代码干预。

栈的优点:入栈和出栈都由C语言自动完成。

分析一个细节:C语言中,定义局部变量时如果未初始化,则值是随机的,为什么?

定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的(也就是随机值)。

栈的约束:预定栈大小不灵活,怕溢出

首先,栈是有大小的。所以栈内存大小不好设置。如果太小怕溢出,太大怕浪费内存。(这个缺点有点像数组)

其次,栈的溢出危害很大,一定要避免。所以我们在C语言中定义局部变量时不能定义太多或者太大(譬如不能定义局部变量时 int a[10000]; 使用递归来解决问题时一定要注意递归收敛)

 嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区私信“嵌入式”0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

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

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

相关文章

聚类方法总结及code

参考链接 聚类方法的分类: 类别包括的主要算法划分方法K-Means算法(均值)、K-medoids算法(中心点)、K-modes算法(众数)、k-prototypes算法、CLARANS(基于选择)&#xf…

jmeter接口测试避坑指南

接口测试看着很简单,但是操作过程中还是出现很多问题,现总结如下: 一、jmeter中乱码问题 可在jmeter.properties 这个文件里面找到sampleresult.default.encodingxx,后面xx改成utf-8,然后取消注释。 解决jmeter的bod…

编译和连接

前言:哈喽小伙伴们,从我们开始学习C语言到实现如今的成果,可以说我们对C语言的掌握已经算是精通级别了,但是我们只学习了怎么写代码,却没怎么了解过代码的背后是怎么工作的。 那么今天这篇文章我们一起来学习C语言的最…

spark获取hadoop服务token

spark 作业一直卡在accepted 问题现象问题排查1.查看yarn app日志2.问题分析与原因 问题现象 通过yarn-cluster模式提交spark作业,客户端日志一直卡在submit app,没有运行 问题排查 1.查看yarn app日志 appid已生成,通过yarn查看app状态为…

Linux的权限管理操作

1、权限的基本概念 在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。 在Linux 中分别有读、写、执行权限: 权限针对文件权限针对目录读r表示可以查看文件内容;cat表示可以(ls)查看目录中存在的文件名称写w…

css钟表数字样式

如图: 代码 font-size: 28px;font-family: Yourname;font-weight: 500;color: #00e8ff;

YOLOv5/v7/v8改进实验(七)之使用timm更换YOLOv8模型主干网络Backbone篇

🚀🚀 前言 🚀🚀 timm 库实现了最新的几乎所有的具有影响力的视觉模型,它不仅提供了模型的权重,还提供了一个很棒的分布式训练和评估的代码框架,方便后人开发。更难能可贵的是它还在不断地更新迭代新的训练方法,新的视觉模型和优化代码。本章主要介绍如何使用timm替…

企业实施MES管理系统时,是否需要一物一码

随着科技的不断进步,企业对于生产管理和效率提升的需求日益增长。MES管理系统作为一种先进的生产管理工具,受到了越来越多企业的关注和应用。然而,在部署MES管理系统时,是否需要实施一物一码的条码进行管理,往往成为企…

“人间烟火”背后,长沙招商引资再出圈

连续多年,长沙荣膺全国最具幸福感城市。同时,长沙也被誉为“中部崛起的引擎城市”。长沙不仅有网红城市的人间烟火气,更以创新的精神,优质的营商环境,高效的政府服务,丰富的人才资源和深厚的产业基础&#…

徐宗本院士将在2023年CCF中国软件大会上作特邀报告

2023年CCF中国软件大会(CCF ChinaSoft 2023)邀请徐宗本院士作大会特邀报告。 特邀嘉宾 徐宗本 中国科学院院士 数学家、中国科学院院士、西安交通大学教授。 主要从事应用数学、智能信息处理、机器学习基础理论研究。曾提出稀疏信息处理的L(1/2)正则化理…

uni-app:实现当前时间的获取,并且根据当前时间判断所在时间段为早上,下午还是晚上

效果图 核心代码 获取当前时间 toString()方法将数字转换为字符串 padStart(2, 0):padStart()方法用于在字符串头部填充指定的字符,使其达到指定的长度。该方法接受两个参数:第一个参数为期望得到的字符串长度,第二个参数为要填充…

【分布式】入门级NCCL多机并行实践 - 02

# 背景知识 大模型和分布式训练对数据的吞吐量以及并行度都有很高的要求,NCCL就是在这个背景下诞生的。 如果你是一个只会写写Python,调用PyTorch和Horovod的算法萌新,可能对于分布式底层的东西不太了解,在下岗热潮中被主管逼着…

分布式锁之mysql 锁

文章目录 使用数据锁:悲观锁 或者 乐观锁悲观锁乐观锁mysql锁总结 使用数据锁:悲观锁 或者 乐观锁 一个sql:直接更新时判断,在更新中判断库存是否大于0 update table set surplus (surplus - buyQuantity) where id 1 and (surp…

Occupancy占据网络论文讲解与分析

一.MonoScene 1.概要 a.使用单目相机,不用深度估计和点云来实现占据网络。 b.提出了一种2D-3D的一种转换方法。 c.在3D-unet底部加入3DCRP来捕获长距离的一个信息。 2.模型结构 图像先经过一个2D的unet结构,这里论文里用的预训练的EfficientNet&am…

I350网卡烧录oprom,通过UEFI PXE引导方案

Intel发布的I350标准固件都是用于LOM设计的。固件已配置LOM模式,不需要搭配外挂flash,将efi driver包进BIOS中就可以使用PXE功能,因此NIC类型的时候直接烧录oprom会报错。 如使用外部flash存放PXE ROM,需要将固件修改为NIC的配置…

蓝桥杯(砝码称重,C++)

思路&#xff1a; 1、用到动态规划思想。 2、用ans[i][j]记录用前i个砝码&#xff0c;能不能称出重量j。 3、详细思路见代码注释&#xff0c;易懂。 #include<iostream> #include<cmath> using namespace std; int main() {int n;int a[110];//记录每个砝码重量int…

8+非肿瘤+线粒体+实验生信思路解析

今天给同学们分享一篇非肿瘤线粒体实验的生信文章“Role of mitochondrial metabolic disorder and immune infiltration in diabetic cardiomyopathy: new insights from bioinformatics analysis”&#xff0c;这篇文章于2023年2月1日发表在J Transl Med期刊上&#xff0c;影…

EPLAN_004#常用功能(四)

线号&#xff1a;火线L&#xff0c;零线N&#xff0c;正极P&#xff0c;负极是M 一、基于设备的设计 也可以通过下面的&#xff08;设备选择&#xff09;进行选择 如果是批量选型&#xff0c;可以在设备导航器中进行多个相同元器件进行选型。&#xff08;筛选器可以自定义&…

前端使用qrcodejs2插件实现根据网址生成二维码

实现效果&#xff1a; 实现方法&#xff1a; 1.安装插件 npm install --save qrcodejs2 2.可以全局引入&#xff0c;也可以只在使用的vue文件中引入 import QRCode from qrcodejs2; 3.在vue文件的template中设置放置二维码的div <div id"qrcode"></di…

8个视频剪辑素材网站,免费下载

找视频剪辑素材就上这8个网站&#xff0c;免费下载&#xff0c;可商用&#xff0c;赶紧收藏起来~ 免费视频素材 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多…