前言
最近在学习《深入理解计算机系统》这本书,第二章是信息的表示和处理,讲了很多具体数据的表示方法(进制转换,整数表示,浮点数表示等)。
信息存储
首先我们先来想下,计算机需要的程序/数据/指令等在计算机里是如何存储的呢?计算机在访问这些信息的时候,是访问每一个bit么?错!字节(byte=8 bit),才是计算机中最小的可寻址的单位。机器级程序将内存视为一个非常大的字节数组,也就是虚拟内存。内存的每个字节都由一个唯一的数字来标识,就是地址,所有可能地址的集合就是虚拟地址空间。虚拟地址空间只是一个展现给机器级程序的概念性映像,实际的实现是将DRAM/内存/磁盘/硬件和操作系统软件结合起来实现的,非常复杂!后面再说吧!
32位系统?64位系统?
之前装电脑,经常听到人说装的是32位还是64位系统,这个32/64到底指的是什么呢?其实这里指的是字长,虚拟地址是以这样一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w位的机器而言,虚拟地址的范围为0 - (2^w-1), 程序最多访问2 ^ w个字节。
大小端
需要在内存中存储的数据有时候非常多,那就引发了另一个问题,这一大堆字节在内存中要如何排列呢?机器一般有2种方式可以选择:大端法和小端法。直接上图吧!一般来说,小端法更适合正常人的思维。。
现在比较新的处理器都已经支持双端法,也就是可以把他们配制成作为大端和小端的机器运行。然而,实际情况是:一旦选定了特定的操作系统,那么字节顺序也就固定下来。比如,手机上的ARM微架构处理器,硬件可以支持大端和小端,但是上面的操作系统Android和IOS,却只能支持小端模式。