为什么 32 位机器最多有 4GB?

Why does a 32 bit machine have a max of 4GB?

这是我做任何研究之前的第一个逻辑:

因为是32位机器,所以会有2^32个空格(也就是~40亿) 但是它们是以位为单位的,所以我必须将它转换成字节。 (~40 亿 / 8) 然后我得到大约 5 亿字节,或大约 500MB。

其实我很好奇为什么它不是 500 MB,所以我发现了这个:

"By definition, a 32-bit processor uses 32 bits to refer to the location of each byte of memory. 2^32 = 4.2 billion, which means a memory address that's 32 bits long can only refer to 4.2 billion unique locations (i.e. 4 GB)." (original source)

但是我又糊涂了,因为每个内存地址都是32位长,而且有42亿个。每个内存地址是 4 个字节,而不是 1 个字节。所以它将是 4.2 Giga * 4 字节 = 16.8 GB。

很明显,我的逻辑中遗漏了一些东西。有任何说明吗?

在典型的现代机器中,每个字节都可以单独寻址。因此,4G 地址意味着 4G 字节。

一个32位CPU意味着它可以访问2^32=42,94,967,296个内存位置(每个内存位置为1字节长)。如果我们将 4294967296 字节的内存除以 1024,我们将得到 4194304 KB 的内存。此外,如果我们再次除以 1024,我们将得到 4096 MB 的内存,即 4 GB。

您将地址的长度与位于该地址的内存大小混淆了。他们几乎没有关系。

到目前为止,32 位机器最常见的选择是将内存组织成 2^32 个唯一地址,每个地址包含 8 位(1 字节)。因此,要对每个位进行唯一寻址,您需要 32+3 位。实际上,内存以 128 或 256 位块(8 或 16 字节)的形式加载到缓存中,因此物理上只需要 32-3 或 32-4 地址线。那么,为什么我们仍然使用 32 位这个术语呢?那是因为地址寄存器在物理上是 32 位大的。有 "load byte" 个说明,但通常没有 "load bit"。 (如果有,你通常有 8 个)