Memory 字号和地址

Memory 字号和地址,memory,architecture,operating-system,word,ram,Memory,Architecture,Operating System,Word,Ram,我正在刷新自己的记忆信息,我对一个单词的大小感到困惑。根据我的理解,单词不是通用定义的大小,而是特定系统定义的大小(以字节数为单位) 根据维基百科: 因此,具有32位内存地址的处理器可以直接访问4 GiB字节可寻址内存 这是否意味着32位处理器可以寻址4294967295字?32位windows的内存限制为4GB,但仔细阅读一个单词的含义让我感到疑惑。windows中的每个单词是否等于1字节?一个字的大小可能只是更大的字节数,而一个32位处理器能够处理8GB、10GB、12GB甚至更多的内存吗?

我正在刷新自己的记忆信息,我对一个单词的大小感到困惑。根据我的理解,单词不是通用定义的大小,而是特定系统定义的大小(以字节数为单位)

根据维基百科:

因此,具有32位内存地址的处理器可以直接访问4 GiB字节可寻址内存


这是否意味着32位处理器可以寻址4294967295字?32位windows的内存限制为4GB,但仔细阅读一个单词的含义让我感到疑惑。windows中的每个单词是否等于1字节?一个字的大小可能只是更大的字节数,而一个32位处理器能够处理8GB、10GB、12GB甚至更多的内存吗?

您混淆了字大小和字节大小,因为字大小是由处理器决定的,字节大小是通用的

如果不使用PAE(物理地址扩展),32位处理器只能处理4GB的RAM,因为只有2^32=4294967296个不同的数字可以用32位表示。这是一个硬件限制

通过将进程映射到页表,使用PAE的32位系统可以处理超过4GB的数据。这允许每个进程访问4GB内存。通过支持PAE,32位版本的Windows Server 2003数据中心在基于x86的计算机上支持高达64 GB的RAM

编辑

字大小表示CPU一次可以处理的位数。所以32位=4字节。然而,字大小和地址大小经常互换使用,这会导致混淆,因为它们确实不同。奔腾Pro是一个32位CPU,具有36位宽的地址总线,允许64GB的可访问内存(通过PAE)

这是否意味着32位处理器可以寻址4294967295个字

这取决于CPU和您如何看待它

有些CPU不能处理比一个单词小的任何内容。16位德州仪器数字信号处理器就是一个很好的例子。它们的C/C++
char
(又称
byte
)、
short
int
类型都是相同大小的16位。这是可以用唯一地址(指针)寻址的最小内存单元,同时也是机器字。由于这些处理器上的数据地址/指针是16位的,因此它们最多可以寻址数据内存中的216个16位字

现在,如果您回到32位操作模式下的x86 CPU,情况会有所不同。最小的可寻址内存单元是8位字节,最大的是32位字(机器字)。地址和指针也是32位的(如果我们忽略分段和页面转换)。这使我们有232个唯一的内存地址。而且,很简单,使用它们,您可以访问多达232个8位字节的内存。但是,您可以用232个唯一地址寻址多少32位字?答案取决于你想要的是不重叠的词还是重叠的词。您可以看到,x86CPU可以在任何地址访问32位的内存单元,而不仅仅是4字节的倍数

在x86上,您不仅限于此:

  0 1 2 3 4 5 6 7  <- address
  \word/  \word/

01234567再次阅读你引用的内容。它表示,
4GiB的**字节可寻址**内存
,意思就是:字节。不是字,也不是DWORD,而是字节。如果我没记错的话,字的大小是由CPU决定的,而处理器的字的大小是由它的外部数据总线的宽度决定的(尽管它可以更窄。)@KenWhite因此我感到困惑。这就是我发帖的原因。为什么是字节而不是单词。我想这就是为什么你否决了我?@贾斯汀:我没有否决你。如果我有,我会在我最后的评论中这样说。然而,你困惑的原因还不清楚。你的问题是“这是否意味着……294967295个单词?”这就是我的评论。你在给我的评论中提出的问题是“为什么是字节而不是单词?”这是完全不同的。你问的问题的答案是“不,它不是指单词。它是指字节,就像你的引文所说的那样。”那么这是否意味着每个地址都有一个字节?我不明白为什么一个地址可以是一个6字节的块。那么您就可以拥有4294967296*6可映射RAM。@Justin还要详细说明一下,一个能够完成您评论中的问题的CPU需要一个48位地址总线。我相信这就是当前64位处理器所使用的。@Justin很抱歉在2013年提出这个问题。无论如何,当每个地址都有8位空间=1字节以便保存数据时,回答您的问题取决于您要保存的内容。如果你想保存一个字符,你需要1个字节,但是如果你想存储一个Int,你需要32位=4个字节,所以4个地址是“空格”。32位处理器每次读取4个字节,因此有32位,很抱歉调用此线程。请允许我问一下,由于1班次移动2个位置,2班次移动4个位置,3班次移动8个位置,阅读单个字符需要多少个左逻辑swift?你能做0逻辑移位吗?thanks@Korpel我不知道你在说什么,回答得很好!非常感谢。我发现第二幅ascii绘图相当混乱,但文字流畅清晰:)这只是其他冲浪者的一个指针,有一个很好的视频解释这个主题。
  0 1 2 3 4 5 6 7  <- address
  \word/  | | | |
    \word/  / | |
      \word/  / |
        \word/  /
          \word/
            ...