深入理解计算机系统-第3版
第一章 计算机系统漫游
信息就是:位+上下文
hello.c程序
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("hello,world\n");
6 return 0;
7 }
hello程序生命周期是从一个源程序(源文件)开始,源程序是由0和1组成的位(比特)序列,8个位被组成一组,称为字节,每个字节表示c程序中的某些文本字符
大部分现代计算机系统使用ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)标准来表示文本字符,实际上就是用一个唯一的单字节大小的整数值来表示每个字符
重点:系统中所有的信息--磁盘文件,内存中的程序,内存中存放的用户数据,网络上传输的数据,都是由一串比特表示;区分不同数据对象的唯一方法就是读取这些数据对象时的上下文;如:在不同的上下文中,一个同样的字节序列可能表示一个整数,浮点数,字符串或者机器指令
注意:需要了解数字的机器表示,因为机器表示的整数,实数与实际的整数实数不同,机器表示的是对真值的有限近似值
程序被其他程序翻译成不同的格式
hello.c高级C语言程序(源文件) ---> 被其他程序转换为机器可识别的低级机器语言指令 这些指令会按照一种叫做可执行目标程序的格式打包,并已二进制磁盘文件的形式存放起来,目标程序也成为可执行目标文件
GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello,翻译过程分为4个阶段
Compilation System
- 预处理器
- 预处理阶段,预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第1行的 #include
命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。结果就得到了另一个C程序,通常是以.i作为文件扩展名
- 预处理阶段,预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第1行的 #include