难度:★
本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。
上篇文章我们聊了SPACE,知道它可以在内存里“预留空地”而不增加文件体积。
但有没有想过一个问题:那片“空地”里,到底是什么?
是全零?是随机垃圾?还是某种特定的模式?
如果你以为“反正没人用,是什么无所谓”,那你就小看了嵌入式世界的残酷。今天我们要聊的FILL指令,就是用来回答“空地里该填什么”的。它的存在,关系到程序的安全、调试的效率,甚至 Flash 的磨损寿命。
一、如果不指定 FILL,默认值到底是什么?
先看答案。在 Keil 的 ARM 汇编器(armasm)里:
默认填充值是0x00。
没错,就是零。如果你用SPACE 1024定义了一块区域而没有用FILL显式指定,那汇编器就把它全填 0。
但注意——这个“默认 0x00”只在汇编器分配已初始化区域时才生效。
如果你用了NOINIT(如AREA STACK, NOINIT, READWRITE),那片区域根本不占文件空间,汇编器不往里填任何东西。它只存在于链接器的“账本”里,运行时的内容是上电后 RAM 的随机残留值。