读书笔记_深入理解计算机系统_第一章_计算机系统漫游
hello.c
#incude <stdio.h>
int main()
{
printf("Hello,world\n");
}
1.1信息就是位+上下文
系统所有的信息,都是由一串位表示的。
在不同的上下文中(可以理解为程序,或者运算),一个同样的字节序列可能表示一个整数,浮点数,字符串或者机器指令。
2.2程序被其他程序翻译成不同的格式
如Hello程序,从源文件hello.c中的每条C语句,需被其他程序转换为一系列低级语言(汇编)指令,然后将这些指令按照一种称为可执行目标程序的格式打包,以二进制磁盘文件格式存放起来。目标程序也称为可执行目标文件。
在linux中,从源文件到目标文件可用编译驱动程序完成
gcc -o hello hello.c
GCC编译驱动程序将hello.c翻译成一个可执行目标文件,过程分为四个阶段
1.预处理阶段
读取头文件中的内容,将它插入上下文,#include <stdio.h>,生成.i作为扩展名。
2.编译阶段
将.i翻译成.s汇编语言程序
3.汇编阶段
将汇编语言翻译成机器语言,将指令打包成一种叫可重定位目标程序的格式.o,一个二进制文件
4.链接阶段
将printf.o预编译文件链接入hello.o
1.3了解编译系统如何工作的最大益处
1.优化程序
2.理解链接时出现的错误
3.避免安全漏洞