【CSAPP】第一章整理(进度1.3)

第一章 计算机系统漫游

主要是全书概览。

示例程序hello.c

#include <stdio.h>

int main()
{
	printf("hello,world");
	return 0;
}

1.1 信息就是位+上下文

hello程序的生命周期是从一个源文件(or源程序)开始的。
源程序事实上是由0和1组成的比特序列,其中1 Byte=8 bits。每个字节表示程序中某个文本字符。
大部分现代系统都使用ASCII标准来表示字符,也就是用一个唯一的单字节大小的整数值来表示每个字符。

上图为hello.c的ASCII文本表示。
hello.c说明了一个基本思想:系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区别不同数据的唯一方法是我们读到这些数据对象时的上下文

1.2 程序被其他程序翻译成不同的格式

Unix中从源文件到目标文件的转化由编译器驱动程序完成。

linux> gcc -o hello hello.c

上述解释为:GCC编译器获取hello.c,并翻译成一个可执行文件,命名为hello。
编译系统(compilation system):预处理器(cpp)、编译器(ccl)、汇编器(as)、连接器(ld
在这里插入图片描述
上述为编译系统过程,分为四个阶段:

  1. 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。
  2. 编译阶段:编译器(cll)将文本文件example.i修改为文本文件example.s,它包含一个汇编语言程序,该程序包含函数main的定义。汇编为高级语言的不同编译器提供了通用的输出语言
  3. 汇编阶段:汇编器(as)将example.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式,并将结果保存在目标文件example.o中。其中,example.o是一个二进制文件,如果用文本编辑器打开将会看到一堆乱码。
  4. 链接阶段:链接器(ld)将一个或多个目标文件外加库链(e.g. printf.o)合并,生成一个可执行目标文件。可执行文件能被加载到内存中由系统执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值