
理解“数据存储区域”的核心在于搞懂嵌入式系统的内存映射和C语言变量的段分配规则。.rodata,.data,.bss等正是链接器划分的段section它们决定了变量/数据物理上放在 Flash 还是 RAM。1. 存储器模型与各段的位置高地址 ┌────────────┐ │ 栈 (Stack) │ ← 局部变量、函数调用帧向下增长 │ ↓ │ │ ↑ │ │ 堆 (Heap) │ ← malloc / free 分配向上增长 ├────────────┤ ← 堆栈都在 RAM │ .bss │ ← 未初始化 / 初始化为0的全局/静态变量 (RAM) ├────────────┤ │ .data │ ← 已初始化且初值非0的全局/静态变量 (RAM) ├────────────┤ │ │ Flash│ │ (ROM)├────────────┤ │ .rodata │ ← const 全局/静态变量、字符串字面量 (Flash) ├────────────┤ │ .text │ ← 程序代码 (Flash) 低地址 └────────────┘Flash / ROM里的段.text、.rodata、以及.data的初始值拷贝RAM里的段.data运行时的变量本体、.bss、堆、栈⚠️.data的初始值烧录在 Flash 中启动代码会把它们复制到 RAM 中对应的.data区域。所以全局变量int a 5;的5在 Flash变量a本身在 RAM。2. 每个段的具体解释