最近注意到,很多人都说伞的虚拟内存占用较高,貌似这个还成了伞的一大缺点.都是MS惹的祸......
首先澄清一下,大家在任务管理器看到的虚拟内存应该是virtual memory,和大家平时说的那个硬盘上的内存文件是不同的,那个虚拟内存叫页面文件(pagefile),为什么大家会搞错这两个东西等下再说.
下面说下什么是真正的虚拟内存(virtual memory),英语好的可以直接去看wiki(就不要看百度百科了,那个貌似没说清楚)网址是http://en.wikipedia.org/wiki/Virtual_memory,英语不好的就看我的解释.
当我们运行一个程序的时候,程序先是向操作系统(OS)申请一个内存空间,也就是虚拟内存.这个内存只是一个逻辑上的概念,并不存在,(废话,你申请了,还得看OS给不给啊,就算OS想给还得看有没有这么多内存给你,呵呵).
然后程序开始一步一步运行,这个时候有程序向自己刚才申请到的内存里写入数据,但是那是个虚拟的啊,于是OS就把虚拟内存映射到实际的内存中去,实际的内存包括物理内存(就是内存条上的空间)和页面文件(也就硬盘上的一个空间,大家俗称"虚拟内存"的那个东西).
所以呢,虚拟内存只是程序员写程序时为了保证程序能完整运行而为程序预留的一个内存空间,但在实际运行的时候程序并不是完整的运行的(比如说,你只用杀软的监控,那它的全盘扫描那部分代码就不会运行),这部分内存空间也就没有被占用.
下面再来说一下我们常说的那个"虚拟内存"是个什么东东.那个学名应该是页面文件(pagefile),这个我就直接引用百度百科就可以了:
页面文件是指操作系统用来构建虚拟内存的硬盘空间。要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。
具体来说,在windows操作系统下(Windows 2000/XP)pagefile.sys这个文件,它就是系统页面文件(也就是大家熟知的虚拟内存文件),它的大小取决于打开的程序多少和你原先设置页面文件的最小最大值,是不断变化的,有时可能只有几十M,有时则达到600M以上。
现在我们回到伞的问题上,任务管理器的那个虚拟内存是指什么呢?应该是virtual memory,这个用英文版windows的兄弟可以去证实一下(可惜我英文的2003上次被格了),原因太简单了,我关掉了windows的页面文件,仍然有虚拟内存的使用,显然任务管理器里的虚拟内存是指virtual memory.好了,这说明什么问题呢?说明伞的程序员写程序的时候考虑到了很多问题,而这些问题我们平时都没有碰到,所以呢,很多代码就没有执行,这些代码所要用到的内存也就没有被OS分配.这也是为什么伞用了那么多虚拟内存,我们却用得不卡的原因.
最后说下为什么大家会把两个"虚拟内存"搞混,顺便鄙视一下MS的翻译水平......
大家知道在windows下的那个pagefile被貌似被MS称为虚拟内存技术(virtual memory technology),结果到了中文里不知道怎么就把technology给省了,翻译成了虚拟内存,嘿嘿...... |