这是我在进行任何研究之前的第一个逻辑:
由于它是 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。
很明显我在逻辑上遗漏了一些东西。有任何澄清吗?
最佳答案
您将地址的长度与位于该地址的内存的大小混淆了。它们完全无关。
到目前为止,32 位机器最常见的选择是将内存组织在 2^32 个唯一地址中,每个地址保存 8 位(1 字节)。因此,为了唯一地寻址每一位,您需要 32+3 位。实际上,内存以 128 或 256 位 block (8 或 16 字节)的形式加载到高速缓存中,因此物理上仅需要 32-3 或 32-4 地址线。那么为什么我们仍然使用 32 位这个术语呢?这是因为地址寄存器的物理大小为 32 位。有“加载字节”指令,但通常没有“加载位”。 (如果有,通常有 8 个)
关于memory - 为什么32位机器最大有4GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39695899/