字长和内存上限

字长和内存上限

很多人都知道计算机字长决定了内存上限,但是这其中的具体的机制是什么呢?

程序计数器(Program Counter)

CPU 主要功能是解释和执行存储在内存中指令,其核心是一个拥有一个字长的存储设备,这个设备被称为程序计数器(PC)。在任何时刻,它都指向内存中的某条机器指令。和 C 语言中的指针类似,程序计数器通过存储指令的内存地址来完成“指向”。

从系统通电开始,直到系统断电,程序计数器就不断更新自己所存储的指令地址,CPU 根据指令地址找到内存中的指令并执行,程序计数器更新,CPU 就执行新的指令。

字长和有效内存上限

假设一台计算机的字长是 1 比特,那么程序计数器可能存储的地址集合为:[0, 1]。字长是 2 比特呢? 4 个:[00, 01, 10, 11]。...

由此可见,如果字长是 n 比特,程序计数器可能存储的地址集合的 size 为 2^n。专业点的说法是,可寻址空间为 2^n 个。

从逻辑上来说,内存是个线性的字节数组,每个地址都代表一个字节的存储空间。

这样以来,字长是 n 比特的计算机,有效内存的上限是 2^n 字节。

32 位和 64 位计算机

经常听说买电脑要买 64 位的,这里的 64 就是指的是字长为 64 位。

在写这篇博客之时(2020 年),市面上的个人电脑大多都是 64 位的了。但还是有部分服务器是 32 位。

32 位计算机有效内存上限是 2^32 字节,也就是 4 GB (1GB = 2^30 Byte),在应用体积越来越大的今天显然不够用。而 64 位计算机有效内存上限是 2^64 字节,也就是 2^24 TB, 即使未来应用体积持续膨胀也不大可能达到 TB 量级,更别提 2^24 TB 了。