《深入理解计算机系统》——读书笔记(一)

  这本书从一个简单的C语言的HelloWorld程序讲起...

  这是这个小程序的生命周期的一个部分:

  HellOWorld程序,从被创建(文本格式),到被执行(在屏幕上打印出来)。

  其间,有个翻译过程,即将高级程序语言(如这里的HelloWorld程序),翻译成计算机能理解的二进制语言。

  这个翻译过程,分为四个阶段。

  • 预处理阶段:预处理器根据以字符“#”开头的命令,修改原始的C程序(修改后,仍然是C程序)。比如上面HelloWorld程序中的第一行中的#include<stdio.h>,这行语句告诉预处理器,让它读取 stdio.h 这个文件(实际上,这个文件即库函数,它提供了你所需要的函数和一些变量的声明),并把它插到HelloWorld程序的文本中。最后,得到一个在原有语句的基础上,增加了一些语句的C程序(hello.i)。

  • 编译阶段:将高级程序语言翻译成汇编语言。一般说来,不同的高级程序语言(如C和Java),在经过编译后,得到的是一样的一样的汇编语言文件(hello.s)。

  • 汇编阶段:将汇编语言翻译成机器语言(即只有0和1的二进制语言),此时,得到的是二进制文件(hello.o)
    Plus:Java的字节码文件不是二进制文件。

  • 链接阶段:可以看到,HelloWorld程序调用了printf()函数,该函数的函数原型(类似于函数头声明)在 stdio.h 文件中。这个函数的完整体存在于一个名为 printf.o 的文件中,而这个文件必须以某种方式合并到我们的hello.o 程序中。链接器的任务就是负责处理这种合并。结果得到 hello.exe文件,它是一个可执行目标文件(它可以被加载到计算机内存中,由系统执行)

猜你喜欢

转载自www.cnblogs.com/Hepta/p/9326874.html
今日推荐