深入理解计算机系统 (1) 程序的执行过程

首先是图1-3展示的一个helloworld程序的整个执行过程。

1:预处理阶段

预处理器(cpp)根据以字符#开头的语句,修改原始的C程序。比如#include命令,就会告诉预处理器把头文件中的内容直接插入到程序文本中,得到了另一个C程序,通常以.i作为后缀名。

2:编译阶段

编译器(ccl)    (compiler) 负责把hello.i 翻译为汇编语言hello.s,包含了一个汇编语言程序。 汇编语言为不同的高等语言的不同编译器提供了通用的输出语言。

3:汇编器

汇编器(as)会把汇编语言翻译为机器指令语言,保存在hello.o 中,是二进制文件。

4:链接器(ld)

在hello的main中调用了已定义好的printf函数,该函数是每个C编译器都提供的标准C库中的一个函数。printf函数存在于名为printf.o的单独的预编译好了的目标文件中,链接器负责把这个文件合并到hello.o中,结果得到一个hello文件,这是一个可执行的二进制文件,可以被加载到内存中由系统执行。


相关文章: