RAM / ROM / Flash
判别规则(核心,唯一要记的)
- 看掉电要不要还在:要 → Flash/ROM;只是运行临时数据 → RAM(掉电丢)
- 看读写性质:变量/堆栈/反复改 → RAM(快、随便写);代码/常量/掉电保存 → Flash(慢、有寿命)
- Flash = "能写的 ROM":可编程但要先擦整块、写慢、寿命约 10 万次——运行高频数据不放它
一句话:"掉电要留的放 Flash,运行反复改的放 RAM;Flash 能写但有块擦、寿命、速度三道坎。"
抽象描述(一句话本质)
数据放哪个存储器,就看三件事:掉电后要不要还在(易失性)、读写快不快(速度)、要不要反复改(可写性)。
三个存储器对比(一张表)
|
RAM(SRAM) |
Flash |
ROM |
| 掉电 |
丢(易失) |
保持(非易失) |
保持(出厂写死) |
| 速度 |
最快 |
慢(比 RAM 慢很多) |
只读 |
| 可写 |
随便写,无次数限制 |
能写,但先擦整块、寿命约 10 万次 |
不能写 |
| 用途 |
变量、堆栈、运行数据 |
程序代码、常量、掉电保存的数据 |
固定固件(基本被 Flash 取代) |
程序各段放哪(背这张)
| 段 |
内容 |
存哪 |
| 代码段 |
程序指令 |
Flash(掉电保持,上电直接执行) |
| 常量(const) |
只读数据 |
Flash |
| RW-data |
已初始化为非 0 的全局/静态变量 |
初值存在 Flash,上电拷贝到 RAM 运行 |
| ZI-data |
未初始化/初始化为 0 的全局 |
直接放 RAM(默认 0,不用存初值) |
RAM 占用 = RW-data + ZI-data + 堆 + 栈
为什么要"初值在 Flash、运行在 RAM":
- 变量的当前值必须在 RAM(掉电丢是正常的,运行时要反复改、要快)
- 但非 0 的初值得放 Flash 里存着,每次上电拷回 RAM 恢复——不然掉电后初值就没了
- ZI-data 初值本来就是 0,上电清零即可,不用在 Flash 占地方
正反例(建立直觉)
- 正例1:程序代码 → Flash(掉电保持,上电直接执行)
- 正例2:全局变量、堆栈、缓冲 → RAM(运行反复改、要快)
- 正例3:设备参数(音量、校准值)要掉电保存 → Flash(或 EEPROM)
- 反例1:把高频更新的缓冲放 Flash → 错,写慢 + 先擦整块 + 寿命有限(每秒写一次很快磨坏)
- 反例2:把程序代码放 RAM → 错,掉电就丢,且浪费
- 反例3:以为 RAM 掉电还在 → 错,RAM 易失
易混对比
RAM vs Flash(最常见考题)
|
RAM |
Flash |
| 掉电 |
丢 |
保持 |
| 速度 |
快 |
慢 |
| 写入 |
随便写 |
先擦整块、有寿命上限 |
| 典型放啥 |
变量/堆栈 |
代码/常量/参数 |
RW-data 初值 vs 运行时值
|
在哪 |
| 初值(非 0) |
Flash |
| 运行时当前值 |
RAM |
| 初值 0 / 未初始化 |
只放 RAM(ZI-data) |
变体验证(3 题,全过=学会)
- 音量设置要重启还在 → Flash;但每秒改一次就不行(Flash 寿命 ~10 万次,高频写磨坏)
- 陷阱题:"全局变量初值存放在 RAM" → 错。非 0 初值存 Flash(RW-data)上电拷到 RAM;初值 0 直接 RAM(ZI-data)
- 陷阱题:4KB 缓冲每秒更新 → 放 Flash 不行(写慢 + 先擦整块 + 寿命上限),放 RAM
口述要点(面试怎么讲)
- 结论先行:掉电要留 → Flash;运行反复改 → RAM
- 为什么代码必须放 Flash/ROM:掉电要保留,上电要能直接执行;RAM 掉电就丢
- 为什么 Flash 不能当 RAM 用:写前先擦整块、写慢、寿命约 10 万次;RAM 无限制
- 为什么 RW-data 初值在 Flash、运行在 RAM:当前值放 RAM(要快、反复改),非 0 初值放 Flash 存着每次上电恢复;ZI-data 默认 0 不用存
- 易错点:以为全局变量全在 RAM(初值在 Flash);把高频写的数据放 Flash;以为 RAM 掉电还在
关系网络
| 相邻概念 |
关系 |
孤立理解会犯的错 |
| 程序分段 |
RW-data/ZI-data/代码段就是"放哪"的答案 |
以为所有数据都在 RAM |
| 堆 vs 栈 |
都在 RAM,是运行时动态区 |
把堆栈误以为要放 Flash |
| 时钟树 |
Flash 读快慢影响 CPU 取指 → Flash 等待周期 |
高频时忘配 Flash 等待,取指跟不上 |
| DMA |
内存→内存搬运就是 Flash→SRAM |
不知 DMA 常配在 RAM 区域 |
| 掉电/低功耗 |
低功耗模式里 SRAM 掉电丢失,BKP 用电池保 |
以为待机后数据还在 |
学习日期
2026-08-18
每主题一页,复习时只翻本目录。