理论上: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