为什么32位操作系统支持4 GB的RAM?

Bla*_*man 27 memory operating-system virtual-address-space

只是阅读关于操作系统的普通讲座中的一些注释,它说:

程序将内存视为从地址0到2 ^ 32-1(0到4GB-1)的字节数组

为什么4 GB?

Joe*_*oey 56

因为32位能够表示最多2 32 - 1 = 4294967295 = 4 GiB - 1的数字,因此最多可以处理2 个32个字节,然后是4 GiB.

但是,有办法绕过这一点.例如,使用PAE即使是32位操作系统也可以支持更多内存.但从历史上看,这最常用于服务器上.此外,非服务器Windows SKU不支持它.到目前为止,所有这些都没有实际意义,因为64位CPU,操作系统和驱动程序支持是司空见惯的.

  • GiB属于slashdot和维基百科.世界其他地方使用GB(无论委员会说什么.) (25认同)
  • 鉴于这是一个提供技术问题答案的论坛,我觉得答案应该是准确的."Giga"是具有特定含义的SI前缀.4千兆字节是4,000,000,000字节,不等于2 32. (5认同)
  • 我认为这个gibibyte的事情与争论冥王星是否是一颗行星一样毫无意义(顺便说一下) (4认同)
  • 当世界其他地方并非都以同样的方式使用它时,格雷格并不是一件好事 (3认同)

mip*_*adi 27

因为每个内存字节都必须有一个地址.在32位操作系统中,地址长度为32位; 因此,有2 ^ 32个可能的地址,这意味着有2 ^ 32个字节= 4 GB.

  • "因为每个内存字节都必须有一个地址." - 当然,仅在字节可寻址系统中.在可单词寻址的平台上,你可以拥有两倍的内存...... (5认同)

Chr*_*uin 22

每个人都说2 ^ 32 = 4GiB,这是对的.以防万一,我们是如何到达那里的:

32位机器使用32位来寻址内存.每个位的值为0或1.如果有1位,则有两个可能的地址:0或1.两位系统(双边)有四个可能的地址:00 = 0,01 = 1,10 = 2,11 = 3.2 ^ 2 = 4.三个比特具有8个可能的地址:000 = 0,001 = 1,010 = 2,011 = 3,100 = 4,101 = 5,110 = 6,111 = 7.

每个位将潜在的地址空间加倍,这就是为什么2 ^ n告诉您在给定位数上使用了多少个地址.2 ^ 1 = 2,2 ^ 2 = 2*2 = 4,2 ^ 3 = 2*2*2 = 8等

当你达到32位时,你处于4GiB.


cee*_*yoz 11

4 GB = 2 ^ 32字节.


Min*_*iel 10

如果你有一个4位系统,这意味着该地址的每个字节是4个二进制数字,你的所有地址的概率将范围从0000通过11112^4 = 16(2因为无论是0或1),利用4位有可能创建16不同的0和1值,如果你有16个不同的addr.每个代表一个byte你可以有一个最大的16 bytes

4位系统将如下所示:

在此输入图像描述

对于32位系统,您的最大值是 2^32 = 4294967292 bytes


Dav*_*d M 9

2 ^ 32 = 4 * 1024 * 1024 * 1024
Run Code Online (Sandbox Code Playgroud)

以字节为单位的是4 GB的定义.换句话说,32位寄存器作为存储器指针可以处理4 GB的内存,而不是更多.


Tam*_*ege 5

实际上,它并不像2 ^ 32 = 4294967296字节那么简单.您可以在x86保护模式下看到启用分页(即使用任何现代操作系统时获得的内容),即使分页转换机制对客户端应用程序是透明的,也不会直接寻址内存位置.

在使用4K页面时,逻辑32位内存地址:

  • 位22-31指的是页面目录
  • 位12-21指的是页表
  • 位11-0指的是4096字节页面中的偏移量

如您所见,您有2 ^ 10(1024)页目录,在每个页面目录中,您有2 ^ 10页表,每页长2 ^ 12(4096)字节,因此2 ^ 32 = 4294967296字节.存储器总线的宽度方便地与CPU的字长相同,但根本不必像这样.实际上,更现代的x86 CPU支持PAE,即使在32位模式下也可以寻址超过4GB(或GiB).