内存优化的技巧

Author: 陈竹梅 Date: 1996-09-20

        1.常规内存(Conventional Memory):0K~640K
        2.保留内存(Reserved Memory):又名上位内存(Upper Memory):640K~1024K
        其中的空闲部分称为上位内存块(Uppen memory blocks,即UMB)。
        3.高端内存(HMA即High Memory Area):1024K~1088K
        通过激活A20线和DOS=HIGH命令调用。
        4.扩展内存XMS(Extended Memory):执行XMS2.0标准,速度较快。最大可管理空间286微机为16MB,386/486微机为4GB。在DOS下,可以通过调用HIMEM.SYS命令来实现。
        5.扩充内存EMS(Expanded Memory):执行早期内存管理规范LIM 3.20/4.0,速度较慢。主要特征是通过在保留内存中开辟64K的页框来管理1M以上的内存,最大可管理空间LIM 3.20为8MB,LIM 4.0为32MB。在DOS下,通过以下两个命令来调用:
        DEVICE=C:\DOS\HIMEM.SYS
        DEVICE=C:\DOS\EMM386.EXE RAM
        (对于这几种内存的详细介绍,请看95年《电脑报》12期,'95合订本108页)。
        明确了以上几个概念后,在着手对你的内存优化之前,应制作一张系统盘,并将现在硬盘上与启动有关的CONFIG.SYS和AUTOEXEC.BAT这两个文件拷贝到系统盘上备用。
        这时我们就可以利用DOS 6.X提供的工具,地传统内存中的可用空间推到极限。
        首先,将你的所有设备驱动程序和必需的TSR(内存驻留程序)配置到CONFIG.SYS或者是AUTOEXEC.BAT中,然后执行DOS中的MEMMAKER程序,它将自动对内存进行优化并修改上述两个文件;但运行过MEMMAKER后,还需要根据自己的经验与机器的实际情况进行一些小的调整。
        第一,把DOS移入高端内存
        运用MEMMAKER后,在CONFIG.SYS文件中会有一个命令行:
        DOS=UMB
        将其修改为:
        DOS=HIGH,UMB
        这样就将DOS移入了高端,可使最大可执行程序的尺寸增加45K左右。
        第二,充分使用UMB
        根据配置的显示卡不同,保留内存的分配也不同,如下表所示:
        从上表中可看出,384K保留内存中尚有许多剩余穴是(单色256KB,彩色卡160KB),这些空间可通过HIMEM.SYS与EMM386.EXE将其作为UMB来使用。作为默认设置,DOS 6.X中的EMM386.EXE和MEMMAKER只搜索到F7FFH。在MEMMAKER完成后,仍可能有未利用的保留内存。
        我们可通过以下几个办法来识别空闲区域,并将其转换为可用的UMB。
        首先,运行DOS 6.X中的MSD,从主屏幕选“MEMORY”来显示保留内存映身图,若其显示出XXX~XXXX段是空的,可在CONFIG.SYS中EMM386.EXE命令行的未尾加入I=XXXX~XXXX;若有多块不连续的空间,可分别加入多个I=XXXX~XXXX参数。
        其次,若你使用彩显卡,可以在上述命令行末加入:I=B000~B7FF;如果你使用的是单显卡则加入I=B800~BFFF。
        另外,在上述EMM386命令行尾加入参数HIGHSCAN,可将F000~F7FF转换为UMB,这样又可获得32K的RAM空间,但有些机型加入该参数后,机器不能启动,此时应将该参数去掉。
        我们还应注意一点,如果对CONFIG.SYS作出以上修改后,WINDOWS不能正常运行,应在其SYSTEM.INI文件的[386Enh]项中加入以下内容来解决:
        DEVICE=MONOUMB.386
        第三,使用EMS内存
        通过在DEVICE=C:\DOS\EMM386.EXE命令行中加入RAM参数,即可仿真EMS。但这样将在保留内存中开辟一个64K的页框(PageFrame)作为一个存取EMS的窗口,使UMB减少64K。
        在EMM386.EXE命令中加入FRAME=NONE,这样既可仿真EMS,又不减少64K的UMB,但在这种情况下,按LIM 3.2规范编写的程序将不能运行,所以可能你的系统中有些程序不能正常运行。
        第四,使用XMS内存
        在EMM386.EXE命令行中加入NOEMS和NOVCPI两个参数,系统将清除EMS内存。这种情况下,可使XMS的穴是达到最大,但是基于EMS和VCPI(虚拟控制程序接口)的程序将不可执行,如AUTOCAD 11.X/12.X与LOTUS 1-2-3等等。所以建议在EMM386命令行中加入NOEMS参数后,不加入NOVCPI参数,而加入入一个数字,可以使EMM386.EXE为这些程序保留用于VCPI的内存数。当机器具有4MB内存时这个数最大为30008,如下命令所示:
        DEVICE=C:\DOS\EMM386.EXE NOEMS 3008
        这样基于VCPI的程序也可正常运行。
        第五,如果你因只缺少不到4K的UMB,而不能将一个内存驻留程序或设备驱动程序装入UMB时,在EMM386命令行末加入NOHI参数,使EMM386自身的一部分不装入UMB,这样可增加5K左右的可用空间。如果增加了这5K空间,允许你在UMB中装入一个30K左右的程序,那样你的最大可执行程序空间等于净增加了25K。
        第六,在使用LH和DEVICEHIGH命令将内存驻留程序和设备驱动程序调入UMB时,应注意装入顺序,这样可在UMB中装入更多的程序。因为很多驱动程序在装入时需要很多的自由内存,而在他们安装完毕后正常运行时,所占用的内存比装入时少得多。
        为了确定最佳装入顺序,有些文章介绍利用反复改变程序的装入顺序,以确认最佳方式。这样需多次启动机器,而且很繁琐。现在介绍一种简单方法来确定装入顺序。在运行过MEMMAKER.EXE后,进入DOS子目录,用EDIT命令找开一个名为MEMMAKER.STS的文件(它是MEMMAKER分析系统配时产生的一个文件),查找该文件中的SIZEDATE部分。
        在这部分中列出了每个在CONFIG.SYS与AUTOEXEC.BAT中所含的内存驻留程序与设备驱动程序,并标出了它们的MAXSIZE(最大穴是)和FINASIZE(最后空间)的数目。根据这些数目,就可以确认最佳装入顺序,原则是MAXSIZE与FINASIZE相差越大的,越早装入。然后,调整CONFIG.SYS与AUTOEXEC.BAT中的程序符合最佳顺序,启动机器即可。
        利用DOS命令MEM/C/P,可以检测出程序是否成功的装入UMB,只要观察第一屏中的CONVENTIONAL与UPPERMEMORY两栏即可得知。
        通过以上介绍,可看出不同的应用程序需要相应的内存配置,建议用户利用DOS 6.X中的功能,设置多重菜单启动方式,以便运行不同的程序,进行相应的工作,使常用程序能在最佳环境下工作。