嵌入式内存深究(6):动态的深渊 —— 栈与堆的终极对决

如果说前五篇我们是在“搞基建”(画图纸、打地基、盖房子、装保险箱),那么这一篇,我们要真正入住并开始生活了。

在程序运行的那一刻,栈 (Stack)堆 (Heap) 接管了比赛。这是嵌入式系统的“狂野西部”,也是 90% 的“随机死机”、“跑飞”和“莫名其妙数据篡改”的案发现场。

1. 引言:相向而行的列车

在大多数 MCU 的内存布局中,通常从 RAM 的最高地址向下生长,(如果有)从 BSS 段的结束地址向上生长。

  • 静态内存(.data/.bss): 是“死”的,编译完就定死了,很安全。

  • 动态内存(Stack/Heap): 是“活”的。

    • 函数调用深一点,栈就长一点。

    • 中断来得猛一点,栈就爆一点。

    • malloc 多一点,堆就碎一点。

它们就像两列在同一条铁轨上相向而行的列车,中间没有物理屏障。一旦相撞(Stack Overflow 或 Heap Collision),系统就会瞬间崩溃,且现场极难保留。


2. 栈 (Stack):沉默的杀手

2.1 裸机与 RTOS 的维度打击

  • 裸机模式: 这是一个二维世界。整个系统只有一个栈。你只需要计算 Max(Call_Depth) + Max(ISR_Depth)。只要留够余量,通常很稳。

  • RTOS 模式: 这是一个三维世界。

    • 每个任务都有自己的栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路往蓝-Anbo

与其打赏不如转发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值