读书笔记–深入理解计算机系统chap1-4

第一章 计算机系统漫游

1.信息就是位+上下文
源程序(0、1位序列;8位一组称为字节)–每个字节表示程序中某个文本字符
大部分的现代系统都是用ASCII标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符
每个文本行都以一个不可见的换行符’\n’来结束的,对应的整数值为10
系统中所有的信息——包括磁盘文件、存储器重的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

2.程序被其他程序翻译成不同的格式
例如,gcc编译器驱动程序的翻译过程可以分为4个过程:
-hello.c源程序(文本)–>预处理器(cpp)-hello.i被修改的源程序(文本)–>编译器(ccl)-hello.s汇编程序(文本)–>汇编器(as)-hello.o可重定位目标程序(二进制)+外部printf.o–>链接器(ld)-hello可执行目标程序(二进制)–>
汇编语言非常有用,它为不同高级语言的不同编译器提供了通用的输出语言。

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

堆排序

堆排序就是对简单选择排序进行的一种改进。(调整堆的过程就是选择待排序序列中的最大值,本质和选择排序是一样的)。
记录的比较与交换是跳跃式进行,因此堆排序是一种不稳定的原地排序方法。
不适合待排序序列个数较少的情况。
在堆排序算法中,我们使用的是大顶堆,小顶堆通常在构造优先队列时使用。

堆结构
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子的结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 Continue reading