7.1.2 链接脚本与启动代码(CRT0) 在嵌入式系统、操作系统内核开发,乃至现代 Rust/Go 的裸机运行时构建中,当编译器把 文件编译成 ,汇编器把 翻译成机器码,链接器却迟迟不肯“盖章放行”——它在等一个契约:一份明确的内存契约。这份契约,不是由程序员口头承诺,而是由链接脚本(Linker Script) 白纸黑字写就;而契约生效前的最后一道仪式,则由一段不足 200 行、却决定整个程序生死的汇编代码完成——它叫 CRT0(C Runtime Zero),也称启动代码(Startup Code)。它不处理 printf,不管理 malloc,甚至不调用 main;它只做三件事:把内存归位、把寄存器清零、把控制权交出去。可正是这三件事,构成了所有高级语言运行的物理基石。