【问题标题】:32bit cpu: how much memory can it use? [closed]32bit cpu:它可以使用多少内存? [关闭]
【发布时间】:2016-12-19 09:18:26
【问题描述】:

现在我知道这个问题已经被问过好几次了,但我真的不知道 32 位处理器在理论上和实际上都不能解决多少内存。 请注意,我来自土木工程背景,所以我仍在学习计算机科学;而且计量单位对我来说很重要,这实际上是我的问题:

现在我知道你可以通过 2^32(或 64)计算 CPU 可以使用多少内存,在这种情况下你会得到 4.294.967.296 位。 现在我知道(或者我想我知道)内存是以字节为单位的,所以为了找出一个 cpu 可以使用多少字节的内存,我将 4.294.967.296/8 除以 536.870.912 字节。 然后除以 536.870.912/1024 得到 524.288 KB。 然后除以 524.288/1024 得到 512 兆字节。 然后除以 512/1024 得到 0.5 GB,这...不是很好。

现在我注意到,如果你一开始不除以 8,你会得到 4 GB;所以我的问题是:ram 是以位还是字节来衡量的。 如果是byes,那么cpu地址位和ram容量有什么关系?

编辑:嘿,我设法了解了计量单位的工作原理。基本上你有从 0x00000000 到 0xffffffff 的 4.294.967.296 个地址,每个地址代表 4 个字节的数据。然后除以 1024 得到 4.194.304 kbytes、4.096 mbytes 和 4 gbytes。抱歉花了这么长时间,感谢大家的反馈。

【问题讨论】:

  • 内存以字节为单位。
  • "在这种情况下你得到 4.294.967.296 位" - 没有。您从该计算中获得字节。在理论上一个 32 位 CPU 可以寻址 4GB - 但实际上由于物理设计这通常只有 2GB(虽然不知道确切的细节),并且由于操作限制而大约为 1.5GB系统
  • @a_horse_with_no_name 2GiB 限制是一种软件设计 :) 由于 MMIO,设备必须使用一些物理地址,但不能超过 2GiB。此外,32 位机器可以访问任意大小的内存,这不是寄存器大小,而是 1)总线/物理地址的大小 2)内存字的大小。尽管 OP 可能会询问 x86 在这种情况下 2) 是否减少,正如您所说的那样,字节 [但 1) 仍然可以是 32 或 36 位]。
  • @Phylogenesis 不,例如,请参阅PIC16F flash program memory。 :)
  • @i486 :我认为他/她混淆了 bitsbytes。 edithegodfather:您能否更新您的问题,因为其中有错误?谢谢。

标签: memory cpu bit ram


【解决方案1】:

32 位 CPU 有 32 位地址寄存器,最多可以寻址 4GB 内存(字节而不是位)。但也有段寄存器。每个段最多可以有 4GB 内存。 64K 段 * 4GB = TB。实际上,任何操作系统都无法做到这一点,例如Windows 7 不使用多段,最大为 4GB。

【讨论】:

  • CPU 有一个fixed number of address lines。如果您在谈论 x86,您会将 segmentsselectors 混淆,同时也忽略了 PAE 等功能。
  • @MargaretBloom 我同意,但这是实际限制(特定 CPU 型号的实现)。理论上地址线的数量可以增加到最大值:段寄存器的最大大小* 4GB。我认为这个问题更具理论性。至少没有关于特定 32 位 CPU 的消息。
  • 那么为什么段寄存器是16位的? :) 什么是物理地址大小,如何制作逻辑地址无关紧要(例如,寄存器配对也可以工作)。
  • @MargaretBloom 因为段选择器(寄存器)是 16 位的。 “CPU 支持 16K(16384) 段数,因此总虚拟内存空间为 4Gbytes x 16K =64 TB”。这是更正确还是你认为它仍然太多? BTW,你知道x86段寄存器CS、DS、ES、FS、GS吗?
  • 没关系。我问是因为,你的话,“至少没有关于特定 32 位 CPU 的消息”,但现在你说“因为段选择器(寄存器)是 16 位的”,这仅适用于 x86。因此,如果您的答案是一般性的,那是不正确的,因为只有少数拱门具有段 reg,如果它特定于 x86,则不是正确的,因为受保护模式不能那样工作。你可以查看我的答案,看看我确实知道 x86 是如何工作的 :)
【解决方案2】:

记忆由许多可读写的项目组成,称为单词
每个项目都有一个唯一的编号,称为地址

CPU 有固定数量的位/引脚来表示地址。
一位可以表示地址 0 和 1。
两位最多代表00、01、10、11。
三位代表......好吧,你明白了。

每个位都有两个值,每个位都独立于其他位,因此每次添加位时,值的数量都会增加一倍(只需将所有旧值放在它们前面,然后再用一个 1,你得到的值是旧值的两倍)。
所以 n 位是 2n 个可能的值,2n 个可能的单词

如果 CPU 最多有这些位数来表示地址(罪魁祸首:寄存器的大小不必与地址的位数匹配。32 位 CPU 可以有 36 位地址例如)它最多可以访问这么多的记忆单词。

内存字可以是任何非零大小。从字面上看,任何大小。 包括 1 位或 14 位或 8 位。
标记上最分散的架构 x86 使用 1 字节的字(因此对于 32 位地址,它可以访问 232 = 4GiB),但这绝不是一般规则。

【讨论】:

  • 感谢您的回复;我想答案是不要把公式当作“做所有的事”:)
  • @editthegodfather 从 cmets 和其他答案中可以看出,很多人都弄错了 :) 公式很简单:total bits = max number字数乘以每个字的位数。通用并不容易,例如,“字节”并不意味着到处都是 8 位,这就是为什么很多协议使用术语 octet
【解决方案3】:

我曾经在我的机器上安装了 core2 duo Intel 处理器和 2 GB RAM,我安装了另一个 4 GB RAM,但 Windows 无法使用全部添加的空间,所有可用 RAM 为 2.9 GB。 usable RAM with 32 bit processor

【讨论】:

  • 这个限制来自操作系统,问题是针对 32 位 CPU 的理论地址空间,而不是针对特定的操作系统实现。 Windows(非服务器版本)不使用 CPU 的所有可能功能。
  • 我不太明白这一点,因为 Windows 7 和其他具有核心 I3 的机器例如可以使用超过 6 GB 的 RAM 空间。
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多