嵌入式-不同数据的存储区域 5.22
2026/5/23 22:29:36 网站建设 项目流程

理解“数据存储区域”的核心在于搞懂嵌入式系统的内存映射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. 每个段的具体解释

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询