32位为什么最大只可以管理4G内存 | LIXI.FUN
0%

32位为什么最大只可以管理4G内存

在百度上搜索,也许会得到这样的答案:$2^{32} = 4GB$

可是这个值是怎么得出来的?一个没有单位的数字,得出来一个带单位的值,首先量纲就对不上。

要回答这个问题,首先需要了解几个 “常识”:

  1. x86 平台的内存最小寻址单位是 1 字节 (1 byte, 1 B, 8 bit),一个地址指向一个字节的空间。
  2. 内存的地址是个数字,这个数字可取值的范围大小* 单位大小 =可管理的内存大小。

32 位(bit) 每一个 bit 可以取 0 或 1 两个值,所以有 $2 * 2 * 2 … * 2 = 2^{32}$ 种可能取值,这个取值指的是地址这个数字,数字是没有单位的,取值范围就是 $0 到 2^{32} - 1$

所以,

$可管理的内存的大小 = 2^{32} * 1 byte = 2^{32} B$

$= 2^{32} / 1024 KB$

$= 2^{32} / 1024 / 1024 MB$

$= 2^{32} / 1024 / 1024 / 1024 GB$

$= 2^{32 – 10 – 10 – 10} GB= 2^2 GB= 4 GB$

没有上面的解释,理解起来确实没头没脑的。

这也就解释了,bool 变量明明只要 1 bit 就可以表示了,但在一般编程语言里却需要 1 byte 的存储空间,因为一个内存地址指向的最小寻址单位是 1 byte。

觉得有收获就鼓励下作者吧