Cortex-M3:为什么 map 文件中某些符号的地址是 0x00000000?

📅 发布时间:2026/8/28 18:36:47
Cortex-M3:为什么 map 文件中某些符号的地址是 0x00000000?
难度:★★本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。编译完一个工程,打开.map文件,在全局符号表里,你可能会看到这样一行:__heap_base 0x00000000 Data 0 startup.o(HEAP) __heap_limit 0x00000000 Data 0 startup.o(HEAP)再或者,链接器直接报错,错误信息里出现:Undefined symbol: SystemInit (referred from startup.o)而对应的.map文件里也会留下地址为0x00000000的符号记录。你心里咯噔一下。0x00000000是向量表的起始地址,是栈顶指针存放的位置。一个全局符号的地址是 0,意味着什么?是它没有被分配空间?还是它指向了不该去的地方?程序会不会因此而崩溃?今天这篇文章,就来拆开 map 文件中“地址 0x00000000”背后的三种完全不同的原因。它们的外观相似,但成因和后果截然不同。理解这个 0,你就掌握了链接器符号解析的最后一块拼图。一、第一种情况:符号真的被分配在地址 0这是最罕见、但也最需要警惕的情况。某