内存分配异常的原因
一台康柏9530原装机,CPU为P90,S3(765)显示卡,630M硬盘,主板自带8M内存,原机装的是西文Windows3.1+DOS6.20。最近对机器进行了升级,加一2.1G硬盘,32M内存,操作系统升级到Windows95,CPU超频120,使用一直正常,后对C盘(2.1G)重新分区(用Windows97的32位FDISK命令),格式化后,装Windows97,使用正常,但有以下现象无法解释:在Windows中切换到DOS,内存分配正常,而进入MS-DOS方式时,发现内存分配异常,现象如下:
Memory Type Total Used Free
Conventional 640K 24K 616K
Upper 155K 42K 113K
Reserved 384K 384K 0K
Extended(XMS) 15205K ? 39580K
Total memory 16384K ? 40309K
Total under 1MB 795K 66K 729K
以上显示,内存总数(Total)不对,不论实际上加装多少内存(从16~32M),该项显示总是16M。扩展内存(XMS)也总是不到16M,奇怪的是内存总数(Free)显示则接近实际内存总数,而Used项则是?号,我曾经杀毒、重新分区、格式化,安装系统后故障依旧,甚至更换内存条也不能解决问题,但只用主板上的8M内存,以上现象消失,真是实在令人费解,现在除了没有低级格式化硬盘外,别的办法都想了,请问这是怎么回事,如何解决?
答:请千万不要再格式化你的硬盘了,来信所述问题实际上与你的硬盘没有任何关系,只要仔细检查一下主板BIOS设置中的Memory Hole AT15M-16M项就明白了(该项一般在Chipset Features Setup设置栏中),把该项设为Disabled即可。该项即所谓的内存空洞设置,该设置是将系统内存中的15-26M间的内存地址重映射给ISA总线,作为一些ISA扩展卡进行数据交换的缓冲区,而系统则不再使用这段内存空间了。当该项设置为Enabled,而用户的实际内存又大于16M时,才会真正有效。这时,用户的实际内存相当于减少1M,且地址不连续,而Windows95并没有对此进行专门的处理,当然无法正确计算出15M以上的内存的分配情况,因此就会出现内存统计在15M以上的那部分“丢失”。那么在Windows95所谓纯DOS状态下,Memory为什么又能正确显示内存的分配呢?这就涉及到Windows与DOS系统的根本区别了,简而言之,Windows系统在内存管理机制上突破了DOS系统下的内存使用的限制,它可以很方便地使用系统中所有的内存,而DOS则只能使用640K的基本内存,超过该容量的内存只能通过一定的内存管理规范来进行内存的映射,这样在15-16M内存地址上的变化对于Windows系统来说是有直接影响的,而DOS本就没有“真正”使用到该段内存地址,因此,它根本就不知道该段内存发生了什么变化,所以它计算出的内存分配不会受到这种设置的影响,因而,会正确无误。其实在纯DOS状态下对此也不是没有一点反映,只要细心看一看这时Memory命令中Total memory中的数据,就会发现这时的总内存比实际的内存少了1M。