1.0 - 计算机系统漫游
将会收获的实践技巧
(1). 如何避免由计算机表示数字的方式引起的奇怪的数字错误。
(2). 通过一些小窍门来优化自己的C代码,以充分利用现代处理器和存储器系统的设计。
(3). 了解编译器是如何实现过程调用的,以及如何利用这些知识来避免缓 冲区溢出错误带来的安全漏洞。
(4). 学会如何识别和避免链接时错误,它们困扰着普通的程序员。
(5). 编写自己的Unix shell、自己的动态存储分配包,甚至于自己的Web服务器。
(6). 认识并发带来的希望和陷阱,这个主题随着单个芯片,上集成了多个处理器核变得越来越重要。
1.1 信息就是位(比特)+上下文
- 所有的信息都是由一串比特表示的,包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据。
- 不同的数据对象可以通过上下文来区分,相同的字节序列可能在不同的上下文中表示不同的数据类型,如整数、浮点数、字符串或机器指令。
- 程序员需要了解数字的机器表示方式,因为它们与实际的整数和实数不同,是对真值的有限近似值。有时可能会导致意想不到的行为表现。
知识点
-
位(bit)是计算机中最基本的数据单位,表示二进制的0或1。比特可以用来存储和传输信息。
-
字节(byte)是计算机中常用的数据单位,一个字节由8个连续的位组成。在计算机系统中,字节是存储和传输数据的基本单位。常见的文件大小、存储容量和网络传输速度也通常以字节为单位进行表示。
-
比特和字节的关系是,1字节等于8比特。换句话说,一个字节可以存储8个二进制位。
-
需要注意的是,不同的字符编码方案可以使用不同数量的字节来表示一个字符。
- ASCII编码使用一个字节表示一个字符。
- Unicode编码通常使用2个或更多字节来表示一个字符。
思考
如同所示,大部分现代计算机系统都使用ASCII标准来表示文本字符,实际就是用一个唯一的单字节大小的整数值来表示每个字符,那为什么要用整数值来表示字符呢?
-
- 计算机内部处理:计算机是基于数字电子电路构建的,它们最擅长处理数字数据。将字符映射为整数值可以使得计算机更容易地处理和操作文本数据。
-
- 字符编码:通过将字符映射为整数值,可以使用不同的字符编码方案来表示字符,比如ASCII、Unicode等。这样一来,不同的字符可以被准确地映射到不同的整数值上,从而使得跨语言和跨平台的文本处理变得更加方便。
-
- 数据传输和存储:在计算机中,数据需要在内存中传输和存储。将字符表示为整数值可以简化这一过程,因为整数值的表示方式相对固定且易于处理。
-
- 算法和数据结构:在算法和数据结构中,也常常需要对字符进行比较、排序等操作。将字符表示为整数值可以使得这些操作更为高效。
- 总的来说,将字符表示为整数值可以使得计算机更容易地处理和操作文本数据,同时也更容易地实现跨语言和跨平台的兼容性。
1.2 程序被其他程序翻译成不同的格式
编译系统的四个阶段
预处理阶段
编译阶段
汇编阶段
链接阶段