潜变量扩散模型原理解析:从宝可梦生成看LDM工程落地
2026/5/23 23:12:06
理解“数据存储区域”的核心在于搞懂嵌入式系统的内存映射和C语言变量的段分配规则。
.rodata,.data,.bss等正是链接器划分的段(section),它们决定了变量/数据物理上放在 Flash 还是 RAM。
高地址 ┌────────────┐ │ 栈 (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。