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,操作系统和驱动程序支持是司空见惯的.
mip*_*adi 27
因为每个内存字节都必须有一个地址.在32位操作系统中,地址长度为32位; 因此,有2 ^ 32个可能的地址,这意味着有2 ^ 32个字节= 4 GB.
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.
Min*_*iel 10
如果你有一个4位系统,这意味着该地址的每个字节是4个二进制数字,你的所有地址的概率将范围从0000通过1111这2^4 = 16(2因为无论是0或1),利用4位有可能创建16不同的0和1值,如果你有16个不同的addr.每个代表一个byte你可以有一个最大的16 bytes
4位系统将如下所示:
对于32位系统,您的最大值是 2^32 = 4294967292 bytes
2 ^ 32 = 4 * 1024 * 1024 * 1024
Run Code Online (Sandbox Code Playgroud)
以字节为单位的是4 GB的定义.换句话说,32位寄存器作为存储器指针可以处理4 GB的内存,而不是更多.
实际上,它并不像2 ^ 32 = 4294967296字节那么简单.您可以在x86保护模式下看到启用分页(即使用任何现代操作系统时获得的内容),即使分页转换机制对客户端应用程序是透明的,也不会直接寻址内存位置.
在使用4K页面时,逻辑32位内存地址:
如您所见,您有2 ^ 10(1024)页目录,在每个页面目录中,您有2 ^ 10页表,每页长2 ^ 12(4096)字节,因此2 ^ 32 = 4294967296字节.存储器总线的宽度方便地与CPU的字长相同,但根本不必像这样.实际上,更现代的x86 CPU支持PAE,即使在32位模式下也可以寻址超过4GB(或GiB).