MCU单片机中内存和flash及堆栈的认识

本文详细解析了程序代码在存储器中的布局,包括Code、ZI、RW和RO等段的概念及其在RAM和ROM中的分配策略。同时,介绍了全局变量、静态变量的存储位置,以及堆和栈的增长方向与作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Code 指存储到 flash【Rom】中的程序代码。
  @ ZI 英语是 zero initial, 就是程序中用到的变量并且被系统初始化为 0 的变量的字节 数,keil 编译器默认是把你没有初始化的变量都赋值一个 0,这些变量在程序运行 时是保存在 RAM 中的。
  @ RW 是可读可写变量,就是初始化时候就已经赋值了的,RW + ZI 就是你的程序总 共使用的 RAM 字节数。
  @ RO 是程序中的指令和常量,这些值是被保存到 Rom 中的。
  @ Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的 ROM 的字节总 数,也就是说程序所下载到 ROM flash 中的大小。
  为什么 Rom 中还要存 RW,因 为掉电后 RAM 中所有数据都丢失了,每次上电 RAM 中的数据是被重新赋值的, 每次这些固定的值就是存储在 Rom 中的,为什么不包含 ZI 段呢,是因为 ZI 数据 都是 0,没必要包含,只要程序运行之前将 ZI 数据所在的区域一律清零即可,包 含进去反而浪费存储空间。
 
所有的全局变量,静态变量之类的,全部存储在静态存储区,紧跟静态存储区之后的,是堆区(如没用到 malloc,则没有该区),之 后是栈区,栈在程序中存储局部变量。
在程序里面,所有的内存分为:堆+栈,只是他们各自的起始地址和增 长方向不同,他们没有一个固定的界限
堆:向高地址增长,
栈:向低地址增长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值