为什么32位处理器只能处理4GiB内存,即使字数很大?

时间:2015-11-07 11:50:07

标签: memory-address processor addressing program-counter

到目前为止,我认为32位处理器可以使用4 GiB内存,因为2 32 是4 GiB,但这种方法意味着处理器字大小= 1字节。因此,使用32位程序计数器的进程可以处理2个 32 不同的存储器字,因此我们有4个GiB。

但是如果一个处理器的字大小超过1个字节,现在大多数处理器就是这种情况,我相信(我的理解是字大小等于宽度数据总线,因此具有64位数据总线的处理器必须具有字大小= 8字节)。

现在具有32位程序计数器的同一处理器可以处理2 ^ 32个不同的存储字,但在这种情况下字大小为8字节因此它可以寻址更多与4 GiB事物相矛盾的存储器,所以我的论点有什么问题?

2 个答案:

答案 0 :(得分:1)

CPU(至少x86系列32位)必须能够访问4GB空间中的任何字节/字/双字。因此,指令被编码为使得目标字大小和存储器地址(通常)属于不同的位字段。因此,CPU访问字节还是双字并不重要,但编码的内存地址必须相同。

请注意,32位操作系统和x86 CPU在技术上可以使用PAE模式获得超过4GB的地址空间。但是,目前的Windows操作系统系列(服务器版本除外)不支持它。某些版本的WinXP,以及Linux和其他32位操作系统可以在x86 CPU上处理64GB内存。

此外,通常操作系统会保留虚拟地址空间的某些部分(用于操作系统内核,视频内存等),因此用户程序可能会使用,例如,每个进程中操作系统可以处理的4GB内存不超过3 GB

答案 1 :(得分:0)

你的前提是不正确的。 32位架构可以处理超过4GB的内存,就像most 8-bit microcontrollers can use more than 256 bytes of memory一样。

例如,64位JVM可以使用compressed Oops使用32位指针寻址32GB内存。请参阅Trick behind JVM's compressed Oops

32位x86 CPU还可以通过PAE处理64GB内存。 ARM上的模拟是LPAE

这里最重要的是32位进程只有4GB的地址,所以即使操作系统本身支持超过4GB的RAM,也无法解决更多问题。通常,地址空间在用户和内核空间之间分开,因此进一步限制了用户存储器。有几种方法可以解决这个问题

  • 产生Adobe Premiere CS4中使用的多个进程
  • 将所需的内存部分映射到当前地址空间,例如Windows上的Address Windowing Extensions
  • ...

32位程序计数器可以处理2个 32 不同的存储字,你仍然是正确的。但是,尽管they did exist in the past

,但没有现代架构使用可字寻址的内存