虽然本人并不是计算机方面的能手,内存方面也并不是那么精通,但是,我看到其他答案感觉并不是很正确,也不能解决该问题的痛处。
题主的问题是:已缓存+可用+空闲后为何不等于内存的总数。
首先,题主对这三个概念其实并不够理解。从题主的图片上也可以看到,可用=已缓存+空闲。也就谁说这三者之间有重复的地方,所以相加肯定得不到总数的值。
其实,这张图片上并没有显示程序正在使用的内存大小。我们知道,计算机的内存大小其实就是内存条的大小,这也是计算机的绝对的物理内存。但是,内存要分配给不同的程序,只要是计算机上的东西需要运行,无一例外都需要内存空间。包括主板的bios和一些外置硬件设备所需要的驱动程序。
我们拿一个4G的电脑做例子。我们买一个4G的内存条放到计算机,然后在计算机属性中可以看到可用的内存不是4G,而是3.6G左右。就是因为主板的bios和一些外置硬件设备的驱动程序占用了400多M(不同电脑可能会有区别)。
说完了硬件驱动占用的部分,接下来还有软件。我们知道,软件的运行需要操作系统,而操作系统本身就是一个大型软件。操作系统启动的时候就会生成有各种进程和服务,只是这一部分可能就需要1G左右的空间,甚至将近2G。这也跟电脑内存大小有关。有些内存大的电脑,开机系统占用的内存也会动态的变大。有些内存小的电脑,一开机内存可能就会占用40%左右。对于4G的电脑,运行一段时间,系统占用大概也得1.3G左右。
好了,我们继续拿4G的电脑做例子。硬件驱动和BIOS占用了400多M,系统占用了1G,接下来就剩下2.5G了。然后,我打开了QQ和浏览器等应用程序,这些软件会随着使用量的增多,内存也会逐渐增大。比如,浏览器多开了一个标签,内存就会增大一点。qq多开了几个窗口,然后再加上视频聊天等,内存也会逐渐增大。更何况我们运行的一般都不会只有这两个软件。这些软件的运行轻松就会上G。再加上一些稍微大型的软件,比如PS,Myeclipse等。上2G都不成问题。这里我们折中,就取1.5G吧
然而,系统并不是软件运行需要多少内存,就给它多少内存。往往是大于需要运行的内存的。因为一个软件的内存并不是固定的,说不定下个操作又需要增大内存。所以我先给它一部分备用的内存,以备不时之需。因为等到需要的时候再分配就会降低效率。一般备用的内存占用大概是软件运行所需的1/3左右。大概也得500M。这部分内存虽然被预先分配了,但是还没有程序真正使用,所以也归属为可用内存中。
所以,软件运行时需要的内存加上备用的内存,又需要不小的占用。
这还没完。比如我想用个截图工具截个图,或者用记事本写个字。这些都会占用内存,叫做"已修改内存"。这些内存可以说是非常不固定的。比如,你写字的过程中,用的是内存,写完之后保存到硬盘了,内存才会释放。你写的越多,已修改内存就会越大。这部分内存相当于当前正在使用的内存。也许会占用20M左右。
这些分配完了,接下来才是内存中真正空闲的部分。也就是题主的图片上写的空闲内存。
我们算一下账。一共4G,bios和硬件驱动程序占用了400M,系统占用了1.3G,软件运行1.5G+备用500M+已修改内存20M,空闲的也就剩下几百兆。如果想我一样经常要开各种程序的,剩余几十兆也很正常。
到这里,就可以得到结论了。那就是:
总数=可用+不可用;
可用=已缓存(就是上面写的备用的内存)+空闲;
不可用=软件(包括系统进程)运行占用的内存+bios和硬件驱动所占用的内存+已修改内存。
加粗的字体代表题主图片上显示的那一部分。
平时比较忙,很少有时间写答案。不足的地方请大家见谅吧。
这个我研究过,你现在是少了,还有时候会多出来,这个不是简单的相加,个人理解:
总数,不用说了,内存识别多大就多大,你的内存3G多估计是32位系统?
已缓存,就是应用程序从硬盘读入内存占用的容量,也就是正在使用的+已经用过但是没有释放的部分。
可用,应该是总内存-当前运行的程序必须的容量。(排除可以释放的容量)
空闲,就是完全没有用到的内存,这部分就是浪费了。