天天看点

《深入理解计算机系统》读书笔记二

本书第二章主要内容为信息的表示和处理,粗看一下好像并没有讲什么特别的东西,都是些大学里都学过的内容.什么数据信息在计算机中是如何表示的(基于位的),整数和浮点数的表示方法,计算机的存储模型,大小端问题等.但其实这部分内容非常重要,因为计算机软件最终处理的就是数据信息,了解数据信息在计算机中的表示/存储和处理方法,能够保证程序运行的稳定性,最重要的一点我认为是能够让程序员写出移植性更强的程序,这一点对于嵌入式软件工程师是非常重要的,因为嵌入式处理器种类繁多,了解不同结构计算机对数据的表示和处理方法,多采用平台无关的方法实现代码,可以大大提高程序的移植性.

在本章中将到了大小端的由来,我觉得很有意思.原来它来自于<格列佛游记>里的典故,说得是两个国家对于吃熟鸡蛋时,要从小端的那头破蛋壳还是从大端的那头吃蛋壳的问题争论不休,还导致了多年的征战.其实它是暗讽了当时英国和法国的连年征战,是个政治用词,居然在计算机的设计中用到了政治领域的典故,看来计算机科学也是一门复合型的学科.取这个名字的意思就是说计算机采用哪种存储形式,不是一个技术问题,没有哪种更好的问题.现在X86的计算机多采用小端形式,而PowerPC采用大端形式,而我们知道的ARM可以通过设置任意采用大端或小端。

但是我们不能忽略大小端的存储形式。首先它关系到软件移植性问题,你想想把一个程序从小端格式计算机移植到大端格式计算机有什么问题?其次关系到网络通讯问题,大家都知道网络协议是按照统一的标准大端格式进行处理的,因为网络通讯是在不同计算机之间的信息共享,那网络两端的计算机到底采用什么方式的数据存储,网络并不知道。我也是我们在Socket编程时为什么首先要对32IP地址和16位端口号首先进行网络字节序处理的原因了。

这章内容很多,后续笔记将讲讲计算机中的补码和浮点数表示,对于我们的编程其实有非常大的帮助,能够解决我们编程时的很多疑问。