我在记忆信息方面让自己很清醒,而且我对Word的大小感到困惑。根据我的理解,Word不是通用定义的大小,而是由特定系统定义的大小(以字节数表示)。
根据维基百科:
因此,具有32位存储器地址的处理器可以直接访问4 GiB的字节可寻址存储器。
这是否意味着32位处理器可以处理4,294,967,295 字? 32位窗口限制为4GB的RAM,但阅读一个单词的含义让我感到疑惑。 Windows中的每个Word都等于1个字节吗?单词的大小是否可以是更大的字节数,32位处理器能够处理8GB,10GB,12GB甚至更多的内存?
答案 0 :(得分:9)
这是否意味着32位处理器可以处理4,294,967,295个字?
这取决于CPU以及你如何看待它。
有些CPU无法处理小于单词的任何内容。 16位德州仪器数字信号处理器就是一个很好的例子。他们的C / C ++ char
(AKA byte
),short
和int
类型都具有相同的大小,16位。这是可以使用唯一地址(指针)寻址的最小内存单元,同时也是机器字。由于数据地址/指针在这些处理器上是16位的,因此它们最多可以在数据存储器中寻址2个 16 16位字。
现在,如果你回到32位操作模式下的x86 CPU,情况会有所不同。存储器的最小可寻址单元是8位字节,最大的是32位字(机器字)。地址和指针也是32位(如果我们忽略分段和页面转换)。这让我们有2个 32 唯一的内存地址。而且,通过它们,您可以访问最多2个 32 8位字节的内存。但是,使用2个 32 唯一地址可以解决多少32位字?答案取决于您是否需要非重叠或重叠的单词。你看,x86 CPU可以在任何地址访问32位的内存单元,而不仅仅是4个字节的多个地址。
您不仅限于x86:
0 1 2 3 4 5 6 7 <- address
\word/ \word/
这些都是x86上32位字访问的有效地址:
0 1 2 3 4 5 6 7 <- address
\word/ | | | |
\word/ / | |
\word/ / |
\word/ /
\word/
...
那么,在x86上使用2个 32 唯一地址可以解决多少个32位字?如果你在讨论所有唯一可寻址和重叠的问题,那就是它们的2 32 。如果,OTOH,你在谈论所有独特的可寻址和非重叠的那些,那就是它们的2 30 。
OTOH,如果您的32位CPU使用非32位地址,则总计数将不同。
答案 1 :(得分:3)
您会混淆字长和字节大小,因为字大小由处理器决定,字节大小是通用的。
不使用PAE(物理地址扩展),32位处理器只能处理4GB的RAM,因为只有2 ^ 32 = 4,294,967,296个不同的数字可以用32位表示。这是硬件限制。
利用PAE的32位系统可以通过将进程映射到页表来满足4GB以上的要求。这授予每个进程访问4GB内存的权限。通过支持PAE,32位版本的Windows Server 2003 Datacenter在基于x86的计算机上支持高达64 GB的RAM。
Edit
字大小表示CPU一次可以处理的位数。所以32位= 4个字节。然而,字大小和地址大小经常互换使用,这会导致混淆,因为它们确实不同。 Pentium Pro是一个32位CPU,具有36位宽的地址总线,允许64GB的可访问内存(通过PAE。)