在虚拟地址模式下,一个程序可以使用的内存容量跟计算机的物理内存(也就是你的内存条)没有关系,它由虚拟地址的取值范围决定。
32位操作系统
在32位操作系统中,程序能使用的最大内存是 4GB,也就是2的32次方。即使你的电脑安装的是16G的内存条也没用,剩下的12G只能空闲着。
让你买那么大的内存,浪费了吧!
64位操作系统
在64位操作系统中,理论上能够访问的虚拟地址的范围是 2^64。
这是一个很大的值,几乎是无限的,就目前的技术来讲,不但物理内存不可能做到这么大,CPU的寻址能力也没有这么大,实现64位长的虚拟地址只会增加系统的复杂度,带不来任何好处。
Windows 和 Linux 都对虚拟地址进行了限制,仅使用虚拟地址的低48位(6个字节),总的虚拟地址大小为 2^48 = 256TB。
256TB也太大了吧,量子计算机时代才会用这么多内存吧!
操作系统还要占用内存
操作系统也是一个程序,而且是其他程序的领导,要时刻管理其他程序,谁不听话就惩罚他,让他崩溃。
反之,普通程序也需要操作系统的帮助,尤其是在访问硬件时,例如分配内存、打开硬盘上的文件、在屏幕上绘画等。
操作系统和普通程序既相爱又相恨。
为了达到又爱又恨的目的,操作系统也要占用一部分内存。
32位的Windows默认占用4GB中的2GB,程序只能使用剩下的2GB。
32位的Linux默认占用4GB中的1GB,程序只能使用剩下的3GB。
64位的Windows默认占用256TB中的248TB,程序只能使用剩下的8TB。
64位的Linux默认占用256TB中的128TB,程序只能使用剩下的128TB。
当然,操作系统占用的内存是可以通过设置来更改的。
总起来说,程序能使用多大的内存由操作系统决定,不同的操作系统、不同的位数都会不一样。
现在我们使用的操作系统大都是64位的了,内存已经足够使用了,所以如果你不缺银子,就使劲升级内存吧,多多益善,不会浪费的。