学习笔记 【深入理解计算机系统】 1.0 - 1.2

102 阅读4分钟

1.0 - 计算机系统漫游

将会收获的实践技巧

(1). 如何避免由计算机表示数字的方式引起的奇怪的数字错误。

(2). 通过一些小窍门来优化自己的C代码,以充分利用现代处理器和存储器系统的设计。

(3). 了解编译器是如何实现过程调用的,以及如何利用这些知识来避免缓 冲区溢出错误带来的安全漏洞。

(4). 学会如何识别和避免链接时错误,它们困扰着普通的程序员。

(5). 编写自己的Unix shell、自己的动态存储分配包,甚至于自己的Web服务器。

(6). 认识并发带来的希望和陷阱,这个主题随着单个芯片,上集成了多个处理器核变得越来越重要。

1.1 信息就是位(比特)+上下文

  1. 所有的信息都是由一串比特表示的,包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据。
  2. 不同的数据对象可以通过上下文来区分,相同的字节序列可能在不同的上下文中表示不同的数据类型,如整数、浮点数、字符串或机器指令。
  3. 程序员需要了解数字的机器表示方式,因为它们与实际的整数和实数不同,是对真值的有限近似值。有时可能会导致意想不到的行为表现。

知识点

  1. 位(bit)是计算机中最基本的数据单位,表示二进制的0或1。比特可以用来存储和传输信息。

  2. 字节(byte)是计算机中常用的数据单位,一个字节由8个连续的位组成。在计算机系统中,字节是存储和传输数据的基本单位。常见的文件大小、存储容量和网络传输速度也通常以字节为单位进行表示。

  3. 比特和字节的关系是,1字节等于8比特。换句话说,一个字节可以存储8个二进制位。

  4. 需要注意的是,不同的字符编码方案可以使用不同数量的字节来表示一个字符。

  • ASCII编码使用一个字节表示一个字符。
  • Unicode编码通常使用2个或更多字节来表示一个字符。

思考

如同所示,大部分现代计算机系统都使用ASCII标准来表示文本字符,实际就是用一个唯一的单字节大小的整数值来表示每个字符,那为什么要用整数值来表示字符呢?

    1. 计算机内部处理:计算机是基于数字电子电路构建的,它们最擅长处理数字数据。将字符映射为整数值可以使得计算机更容易地处理和操作文本数据。
    1. 字符编码:通过将字符映射为整数值,可以使用不同的字符编码方案来表示字符,比如ASCII、Unicode等。这样一来,不同的字符可以被准确地映射到不同的整数值上,从而使得跨语言和跨平台的文本处理变得更加方便。
    1. 数据传输和存储:在计算机中,数据需要在内存中传输和存储。将字符表示为整数值可以简化这一过程,因为整数值的表示方式相对固定且易于处理。
    1. 算法和数据结构:在算法和数据结构中,也常常需要对字符进行比较、排序等操作。将字符表示为整数值可以使得这些操作更为高效。
  • 总的来说,将字符表示为整数值可以使得计算机更容易地处理和操作文本数据,同时也更容易地实现跨语言和跨平台的兼容性。

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

编译系统的四个阶段

预处理阶段

编译阶段

汇编阶段

链接阶段

本篇思维导图如下

1.png