发布时间:2026/8/18 20:50:20
嵌入式学习历程-堆栈分析(裸机篇) 写在前面的话博主只是一个求职中的应届毕业生工作经历尚浅如有问题还请各位大佬不吝赐教指出我的错误十分感谢‍‍‍同时图中出现的视频和截图来自youtube上的core dump首先大家先熟悉一个黑话大家平时说的“堆栈”在百分之九十九的情况下指的是栈而不是堆和栈。栈堆栈1栈有栈顶和栈底之分我们在数据结构的时候都学习过栈是先进后出由高地址向低地址增长。对于绝大部分的ARM/X86而言这句话都是对的所以我们可理解为栈底固定指的就是高地址这个起始地址待我们在函数中定义变量计算等操作的时候就会进行压栈/入栈所以栈顶就开始往低地址增长了。这也是为什么c的编译器需要我们明确类型确定类型的字节所占大小每一个栈帧才能明确其大小也就是栈顶移动的距离。出栈发生在函数调用结束的时候当前栈帧函数所用的栈空间中所有的变量都会出栈意味着生命周期结束static这类关键字修饰的变量放置于.data或者.bss中不在栈内所以不会消失这也是为什么我们说这些关键字改变了它的生命周期同时也让我们明白为什么传一个值到我们自定义的函数里面操作之后离开函数变量修改不生效因为本质上就是在新函数的栈中用一个新的变量来接收这个值操作都是对这个新变量进行操作一旦函数结束这些变量都出栈了自然没法修改想要在函数内部修改外部变量就只能用指针栈顶回退其所有的变量大小的距离就回到了一开始调用函数的地方继续执行。在函数调用结束后有两种情况有无返回值1.有返回值你就必须用一个同类型的变量来接收其返回值就相当于在函数调用的那个地方留了返回值大小的空间后续的栈都是被调用函数的内容return就是最后栈顶回退到你一开始的留的空间写上对应返回值。2.没有返回值那就不需要由变量接收不需要留这个空间直接回退整个被调用栈帧的距离接上原函数的调用处继续执行。所以为什么栈都这么快呢原因就在于它的紧凑和确定性每次函数的调用和退出都有着明确的移动距离不需要花时间去寻找位置或者释放空间直接上下sp移动即可时间复杂度为O(1)。堆堆栈的本质区别就在于此栈只能后进先出有严格的顺序可以保持紧凑无碎片而堆可任意释放任意位置数据导致碎片不可避免。每次写入都需要去寻找足够大的内存这里再加上一些算法在效率和碎片化上面做取舍时间复杂度没法预测擦除也需要去查找又是一笔开销自然速度是远远比不上栈。碎片化简单理解就是总内存空闲空间是足够的但是由于他们之间被有数据的内容隔开了没法连到一起组成一个足够大的空间来存放我的数据。如图所示总空间够但是C没地方放。这东西实际上在大部分的裸机中都是不会去使用的可能这就是为什么提到堆栈大家想到的都是栈而不是堆使用一般就是malloc申请但是对于裸机而言没有比较完善的内存管理malloc确实具备该功能但是对于mcu而言不算是太适用一般都是设计内存池进行管理那频繁使用malloc申请造成的碎片就无法管理这会导致很严重内存浪费和响应延迟。所以对于堆我们的启动文件中默认的设定都是很小的基本不会用到大容量的内存需求放在静态全局数组即可一两个标志位放在函数内部的局部静态变量也够用了尽量避免对堆的使用。栈溢出对于整个栈区而言有一个固定的大小这是一开始就设定好的空间范围所有的函数运行的栈都在其中所以说程序运行的时候栈是动态变化的随着函数调用不断变化但是有一个最大值的限定超过了就会发生栈溢出。老师和工作的师傅们或多或少都有提到过为什么我们不要在单片机这种资源受限的机器中写递归因为递归本质上就是函数一层层的自我调用就会导致栈原来越深一个不小心就超了。但是超了不代表就有事。图中是启动文件默认的栈大小对于c8t6而言有20KB的ramram中主要包含堆栈静态存储区.bss,.data,.rodata他们基本位于最低地址之后是堆而栈我们知道位于高地址而这里默认的栈才1KB他们之间很多的空间都是没有分配的属于空闲区栈溢出的到了空闲区是无感的程序没有任何问题但是如果用超到了低地址那边的数据就会发生异常了这个时候问题才会暴露。另外一种情况叫踩内存对于rtos而言由于有多个栈互相之间如果使用不当就会发生踩踏裸机只有一个这种情况一般不会发生。小结总体来看栈虽然速度远远快过于堆但是因为它严格的管理导致我们的自由度受限你不可能在不移除当前栈顶的情况下去移除其下方的数据不然就会导致栈的结构受到损害。而且栈用起来一旦过深或者静态数据区存放消息过多都会导致栈溢出对于系统而言就是毁灭性的打击基本没有补救机会。堆虽然慢但是极其灵活数据可以随意进出没有什么顺序和限制而且堆内存每次使用都是靠malloc申请内存不足的话是不会让你去用的安全性上有足够的保障。浅浅挖个坑对于rtos而言堆与栈的情况又会发生一些奇妙的变化这个会在下一个的RTOS篇中指出感谢各位看到这里本文部分插图截取自YouTube 频道 Core Dump视频中对于堆栈的分析版权归原作者所有仅用于学习交流侵删。

相关新闻

2026/8/18 20:50:20

多智能体系统与组合融合:解决大模型价值对齐的工程实践

1. 从单兵作战到团队协作:为什么大模型需要“对齐”价值观? 最近在折腾大语言模型(LLMs)的时候,我一直在琢磨一个事儿:我们费了老大劲,又是微调又是提示工程,好不容易让模型在某个任…

2026/8/18 20:50:20

Spring AI 2.0:Flux

方法作用Spring AI 常见用途map一对一转换内容脱敏、包装 SSE、格式转换filter过滤元素忽略空片段或无效事件doOnNext观察元素日志、统计输出片段doOnError观察异常记录模型或网络异常doFinally观察最终结束统计耗时、识别完成/失败/取消onErrorResume切换备用流返回友好错误、…

2026/8/18 20:50:20

OpenRouter Ori DeepSeek Harness:本地部署大模型实战指南

在探索大模型应用落地的过程中,开发者们常常面临一个核心矛盾:如何在享受云端强大模型能力的同时,又能保证数据安全、降低延迟,并实现成本可控?OpenRouter 最新推出的 Ori DeepSeek Harness 正是为解决这一痛点而生。…

2026/8/18 22:00:26

奥迪TT电动化转型:法规、平台与品牌重塑下的生存抉择

1. 从“驾驶者之车”到“生存之战”:奥迪TT的十字路口 最近,关于下一代奥迪TT或将全面电动化的消息,在车迷圈和汽车行业内激起了不小的波澜。对于很多像我这样,从第一代TT圆润的“蛋壳”造型开始,就将其视为“驾驶者之…

2026/8/18 22:00:26

本地部署AI大模型实战指南:从Ollama入门到工程化应用

最近在技术社区里,关于“无审查”AI模型的讨论热度很高,很多开发者和研究者都在寻找能够本地部署、自由探索的AI工具。今天,我们就来深入探讨一下这个领域,并为大家带来一份详尽的本地部署大语言模型的实战指南。无论你是想搭建一…

2026/8/18 22:00:26

基于Qwen、RAG与LoRA构建垂直领域大模型:以法律智能应用为例

在尝试将大模型应用于法律领域时,你是否遇到过这样的困境:模型对专业法律术语理解不深,回答流于表面,甚至“一本正经地胡说八道”?或者,想针对特定法律任务微调模型,却苦于数据量小、算力有限&a…

2026/8/18 22:00:26

基于Qwen大模型与RAG+LoRA技术的法律智能问答系统实战

这次我们来看一个面向法律领域的实战项目:基于 Qwen 大模型,结合 RAG 和 LoRA 技术,实现罪名识别、刑期预测和司法解释生成。这个项目不是简单的概念介绍,而是从环境搭建、模型微调、知识库构建到接口部署的完整流程,并…

2026/8/18 22:00:26

基于Qwen、RAG与LoRA构建法律大模型应用:从环境搭建到部署实践

这类项目最值得先看的不是功能列表,而是能不能在普通开发者的机器上,把“罪名识别”、“刑期预测”和“司法解释生成”这三个看似专业的任务,用一套清晰、可复现的流程跑通。很多人一看到“刑法大模型”、“RAG”、“LoRA”这些词就觉得门槛高…

2026/8/18 21:55:26

2026年小程序开发公司排行怎么参考?费用、周期和售后能力对比

2026年小程序开发公司排行怎么参考?费用、周期和售后能力对比小程序开发公司排行可以作为初筛线索,但不能直接等于适合。企业真正要比较的是搭建方式、上线周期、费用边界、后台维护、支付或预约能力、页面交付和售后响应。普通展示、预约留资、小程序商…

2026/8/17 10:49:52

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步?是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭?最近,通义千问团队发布的 Qwen3.8-27B 模型,宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz,PWM 模式恒压Buck DC-DC 转换器,8V 到36V 宽工作电压范围,低纹波,内置低导通电阻功率MOS。ME3169 内置环路补偿电路,可以减少外围元器件数量。内部设计有恒压环路,可以通过外部电阻…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…