理论上:32位=2^32B = 4 * 2^30B = 4GB,这是 32 位下单进程内存上限
目前(2015年5月),Intel的32位架构下,可使用的地址线是36个,可使用的最大物理地址是2^36B,折合64GB,可用的地址空间是4GB。
64位架构下,地址线是46个,所以最大的物理地址是2^46B,折合64TB,可用地址空间也是这么大(目前为止):
为什么32位Windows中实际可用内存少于4G:
虽然物理地址有4G,但CPU如果要访问你的显卡上的显存,就必须把物理地址空间的一部分用于标识显存,这种技术被称为memory-mapped I/O,这样可以让CPU操作显存像操作内存一样。
在Windows的设备管理器里,查看显卡的属性页里的“资源”,可以看到内存映射的地址范围,实际上不管32位还是64位,都需要占用一部分地址空间,32位Windows只有4G的地址空间,被显存占去了一部分,所以可用的地址空间就少于4G了
实际上不仅仅是显存,你电脑上的PCI控制器,各种网卡、声卡、USB控制器等等都需要占用一定的物理内存,所以最终的后果就是可用的物理地址范围变得特别少,最少可能只有1.99GB,这种限制在32位Windows上是不可改变的。
所以,32位WIN7的可用内存才变得那么少,解决问题的唯一途径是换64位系统,或者Linux。
CPU
|
CPU Address Bus Size
|
Maximum RAM
|
8086
|
20 bit
|
1MB
|
8088
|
20 bit
|
1MB
|
80286
|
24 bit
|
16MB
|
80386SX
|
24 bit
|
16MB
|
80386DX
|
32 bit
|
4GB
|
80486SX
|
32 bit
|
4GB
|
80486DX
|
32 bit
|
4GB
|
Pentium I
|
32 bit
|
4GB
|
K6
|
32 bit
|
4GB
|
Duron
|
32 bit
|
4GB
|
Athlon
|
32 bit
|
4GB
|
Athlon XP
|
32 bit
|
4GB
|
Celeron
|
36 bit
|
64GB
|
Pentium Pro
|
36 bit
|
64GB
|
Pentium II
|
36 bit
|
64GB
|
Pentium III
|
36 bit
|
64GB
|
Pentium 4
|
36 bit
|
64GB
|
Athlon
|
40 bit
|
1TB
|
Athlon-64
|
40 bit
|
1TB
|
Athlon-64 FX
|
40 bit
|
1TB
|
Opteron
|
40 bit
|
1TB
|
Itanium
|
44 bit
|
16TB
|
Itanium 2
|
44 bit
|
16TB
|
PAE确实可以让x86硬件支持到能够访问64G的地址空间,Windows的内核也支持使用多达64G的物理地址空间,但是微软偏偏要对各个版本的Windows的物理内存上限作出限制,下面是XP和Win7的物理内存上限
参考:
https://blog.csdn.net/w892824196/article/details/80558114
https://bbs.pediy.com/thread-137830.htm
https://docs.microsoft.com/zh-cn/windows/win32/memory/memory-limits-for-windows-releases?redirectedfrom=MSDN
理论上:32位=2^32B = 4 * 2^30B = 4GB,这是 32 位下单进程内存上限目前(2015年5月),Intel的32位架构下,可使用的地址线是36个,可使用的最大物理地址是2^36B,折合64GB,可用的地址空间是4GB。64位架构下,地址线是46个,所以最大的物理地址是2^46B,折合64TB,可用地址空间也是这么大(目前为止):为什么32位Win...
ip地址是
32位
的,那么所有可能的ip地址一共有2**32=4G个。
那么问题来了,这所有的ip地址存储起来到底是多大的
空间
呢?
一开始忽略了这个问题,直接认为是4G的
空间
,仔细想了想,不对啊,每一个ip地址是
32位
=4byte,那么4G种变化x4byte=16GB
空间
啊。这应该才是正解。
于是第二个问题来了:
32位
寻址
地址的操作
系统
内存
应该是多大
对于Linux
64位
系统
,理论上,64bit
内存
地址可用
空间
为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的
空间
,Linux实际上只用了其中一小部分(256T)。
Linux
64位
操作
系统
仅使用低47位,高17位做扩展(只能是全0或全1)。所以,实际用到的地址为
空间
为0x0000000000000000 ~ 0x00007FFFFFFFFFFF(user space)和0xFFFF800000000000 ~ 0xFFFFFFFFFFF