为什么 SPACE 不占用目标文件的大小?
难度:★★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。在启动文件里,你一定见过这样的代码:Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp这定义了一个 1KB 的栈空间。然后你编译,去看生成的目标文件(startup.o),发现它的大小可能只有几百个字节。明明 SPACE 分配了 1024 个字节的空间,为什么文件大小没有增加 1024 个字节?如果这 1024 个字节都真实存在文件里,那启动文件岂不是轻轻松松编译出几 MB 的目标文件?答案在于:编译器并没有把这 1024 个字节真的放进文件里,而是在文件的“目录”里记了一笔账:这里需要一块空地,运行时记得留出来。今天,我们就来剖析这个“记账”机制——ELF 文件中的SHT_NOBITS段,以及它为什么是嵌入式系统最优雅的设计之一。一、一个反直觉的实验:SPACE 到底占了多少空间做一个简单的对比实验。

相关新闻

最新新闻

日新闻

周新闻

月新闻