Entries

正四篇:谣言击破——正确设置Windows的虚拟内存

我比较习惯把页面文件放在一个专门的分区上,我觉得这样的话可以避免碎片影响访问速度。
以前玩游戏的时候经常出现“调整虚拟内存”搞得游戏中断(有时候干脆“非法操作”,就算游戏本身是在窗口模式下的也一样)这种事情实在让人很不爽,所以我干脆把最大和最小设置成一样的……
后来有一天呢朋友换新机,就问到关于页面文件的问题……然后几个朋友交流之中总结出这样的一些信息:
把页面文件放在经常有其它写操作的分区上,就算页面文件成最大和最小设置成一样也会产生碎片,莫名其妙
禁用页面文件可能会出一些问题,具体情况请看这里
有文章说把页面文件的最小设置成跟最大一样会让Windows“自作聪明”地把一些没必要放到虚拟内存中的东西也写到虚拟内存中,反倒会降低总体性能。



最后朋友决定完全禁用页面文件,而我就在系统分区上放一个较小的,在专门的分区上放一个较大的页面文件,最大最小设置成一样(64位系统,4G的物理内存加上4G虚拟内存,我想应该没那么容易出现不够用的问题吧?)
反正,对于红字的那个说法,我是很怀疑的(也许说根本就不相信更准确一点吧)……而且我觉得,如果因为系统在游戏或者别的什么程序正在运行的时候调整虚拟内存大小(这简直是一定会发生的事儿)导致程序异常终止的话,就实在是得不偿失了。



两天前重装系统之后,我一直没想起来设置虚拟内存……今天重新设置的时候,在专用的分区上设置了“由系统决定(托管)”……然后等想起来的时候,去看了一下,发现它大小是4G……
这就说明Windows之所以设计“最小”虚拟内存这种参数,最主要的原因恐怕就是Windows不确定用户你打算给它多大硬盘空间当虚拟内存用,而不是设置小对Windows有什么好处!
当然,这也只不过是我这么猜测一下而已……为了验证这个事情,我写了一个专门吃内存的程序……
反复申请内存空间并写入随机字节组(每次256M)……
最后监视程序反映物理内存居然用到了3.92G/4G这种恐怖的程度!
而在到达这种程度之前,根本就没有任何明显的大规模硬盘操作!
在这之后再申请并写入内存,才发生较大规模硬盘操作,运行中的其它程序也开始出现明显变慢的状况……
从监视程序上看,之前虚拟内存的使用一直在几十M的水平,而刚刚我把那个专门吃内存的程序关闭的时候,虚拟内存占用已经到了1.1G的水平……一直到现在也还是1.1G……



这样看的话,红字部分的“Windows会自作聪明……反倒降低总体性能”只不过是那些爱出风头的人没有根据的胡说八道,压根就没有可信之处……

不过谁能告诉我为什么这种毫无根据的说法居然会被人到处转载当成真理啊?



至于某篇经典的“优化”文章说:虚拟内存太大的时候打开一些大文件反倒会出现内存溢出的错误……
我又不认识写这文章的人,我上哪知道他/她怎么测试的?
不过我的程序快把物理内存吃光了也没出现所谓的“内存溢出”问题,起码说明大规模内存读写本身不会导致问题……
这样的话我看就是这么两种可能了:
1 用了劣质内存……
2 测试用的工具不够专业!

操作系统再怎么高明,管理内存的工作也还是要用一小部分内存的,如果正巧用于内存管理的这块内存有问题,虽然发生错误不是必然的,但想来概率也低不到哪去。

而最大的一种可能,我认为是用于测试文件读取的工具不够专业!
据我所知一般人硬盘上通常会有一些电影,而某些“专业人士”可能经常放一些介质映像在硬盘上……
质量较高的电影媒体文件一般在800M以上,而介质映像小则500M大则2G、8G……
很多不够专业的工具会把文件内容完全读入后在内存中整体处理,这样往往要用比文件实际大小大2到4倍的内存空间……
有些稍微好一点的工具,虽然是实现局部处理,但由于设计问题,在打开文件初始化的时候也要用几倍于文件大小的内存空间……

而且有个很容易被忽视的问题就是,不管物理内存和虚拟内存有多大,Windows中32位应用程序实际能处理的内存空间是一个固定数值!对于一般的32位Windows来说,程序能处理的内存最大值是2G,加上启动参数可以是3G;在64位Windows上,32位程序能处理的内存最大值是2G,链接时指定大地址参数才可以处理到4G!
(我写的吃内存程序最初只申请不使用,申请到不到2G的时候出现了内存溢出的错误,但这个时候物理和虚拟内存还都基本空着呢!)

再换一个说法的话,就是在平常能见到的32位Windows环境中,并非为大文件处理而设计的程序最大能够处理的文件大小也就是2G/4大约500M的样子……

所以,设想一下,如果写那文章的“专业人士”的物理内存和虚拟内存加起来小于2G,他/她可能会用500M到1.5G之间的文件进行测试……内存自然会不够用……
而如果他/她的物理内存和虚拟内存加起来有3到4G的那个样子,他/她做实验用的文件就会是2G以上……不够专业的工具很自然地会尝试申请大于2G甚至4G的内存空间……不出错才怪呢!

然而事实上,专门用于大文件处理的工具,比方说“二进制”编辑工具WinHex,比方说虚拟光驱工具Daemon Tools,无论处理多大的文件都不会产生这样的错误——因为它们从一开始就考虑到这种情况了。


写完这篇博文以后,我就要把虚拟内存重新设置成4G~4G并重启动了。



至于那个人为什么没说虚拟内存小也有同样的问题……
就算他/她是天才或者白痴——我指会上网的那种——我也不相信他/她会在虚拟内存和物理内存加起来也没多少的情况下用同样的巨型文件去试……
不用试并且的确没有试的东西,当然不会有结果了。



实际上我根本是不太可能用上4G以上的内存的啊,可是设置虚拟内存已经成了习惯了啊TvT
可能有些人会需要用到虚拟内存的吧=w=
引用此文章(FC2博客用户)
http://shinron4.blog126.fc2blog.us/tb.php/30-32fa7988

引用

留言

发表留言

发表留言
只对管理员显示

Appendix

自我介绍

优雅的神棍 / Elegant Tales

Author:优雅的神棍 / Elegant Tales
神棍你好,神棍再见。

最新引用

QR

QR

羔羊们啊

加为好友

和此人成爲好友

搜寻栏