【问题标题】:Why does a 32 bit machine have a max of 4GB?为什么 32 位机器的最大容量为 4GB?
【发布时间】:2017-02-03 09:18:13
【问题描述】:

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

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

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

"根据定义,32 位处理器使用 32 位来指代 每个内存字节的位置。 2^32 = 42 亿,这意味着 32位长的内存地址只能指42亿 独特的位置(即 4 GB)。”(original source

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

显然我在逻辑中遗漏了一些东西。有什么解释吗?

【问题讨论】:

    标签: memory memory-management 32-bit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您将地址的长度与位于该地址的内存大小混淆了。它们完全不相关。

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

        【讨论】:

        • 哦,那么如果我的内存位置 0x00004000 中有 0x12345678,那么数据(0x12345678)将被切割成 4 个块,最终占用 4 个内存位置?啊!那就是大端和小端发生的时候。我应该知道的。那么我真正的问题是,当我们有 4 个字节的内存地址时,为什么每个内存地址只有 1 个字节?为什么我们不能为每个地址提供更多数据?
        • @RivenLv3:对于一些专用产品,我们确实看到每个地址使用了超过 1 个字节。但考虑到常见文件是字节大小的,网络通信协议也是如此。具有非标准尺寸会破坏互操作性。
        猜你喜欢
        • 2012-09-13
        • 1970-01-01
        • 2014-03-25
        • 2017-07-16
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2012-12-21
        相关资源
        最近更新 更多