读书笔记-深入理解计算机系统(第一章)

此系列为读<深入理解计算机系统>的笔记,如有理解错误,望请指正.

第一章 计算机系统漫游

计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序.

1.1信息就是位+上下文

源程序实际上就是由一个值0和1组成的位(bit)序列,8个位被组织成一组,称为字节.每个字节表示程序中某个文本字符.

大部分现代系统都是有ASCII标准表示文本字符,只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件.

系统中所有的信息—–包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的.区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.比如:在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令.

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

此例子为书中所写的hello.c的例子,从其生命周期分析系统的执行过程(可见原书)

在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:

unix>gcc -o hello hello.c

执行这四个阶段的程序(预处理器、编译器、汇编器、链接器)一起构成了编译系统(compilation system).

1,预处理阶段.预处理器(cpp)根据以字符#开头,修改原始的C程序.

2,编译阶段.编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序.

3,链接阶段.目标文件合并到我们的hello.o程序中,链接器就处理这种合并.得到hello文件,一个可执行目标文件,可以被加载到内存中,由系统执行.

翻译过程可分为四个阶段完成

1.3了解编译系统如何工作是大有益处的

有一些重要的原因是促使程序员必须知道编译系统是如何工作的,其原因如下:

  • 优化程序性能:现代编译器都是成熟的工具,通常可以生成很好的代码.但是,为了在C程序中做出好的编码选择.我们确实需要了解一些机器代码以及编译器将不同的C语句转化为机器代码的方式.例如:while循环比for循环更有效吗?
  • 理解链接时出现的错误.一些最令人困扰的程序错误往往都与链接器操作有关.例如:为什么有些链接错误直到运行时才会出现?
  • 避免安全漏洞.缓冲区溢出错误是造成大多数网络和
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值