|
内存分配失败与内存不足错误及虚拟内存相关问题
虚拟内存太大,系统就会花费更多的工夫进行切换和数据交换,非但不会增加系统的效率,反而有可能会降低系统的效率,这就得不偿失了。系统默认虚拟内存大小为物理内存的1.5倍,如果内存太小,倍数可以设置的高一些,如果内存在2GB以上,就完全没有必要设置过高的虚拟内存。
当前,随着内存越来越大(例如4GB内存),还出现了一种新情况,那就是将物理内存变为硬盘。这需要用到内存虚拟软件,例如RAMDISK、RamDisk等,这样就会增加系统的执行效率。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值0已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的健壮性。
若应用程序没有检查这个错误,它就会按照思维惯性认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的中断描述符表,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的写内存错误,并指出被引用的内存地址为0x00000000。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中安装的病毒程序),更改了大量的系统参数和系统文件之后。
一、windows中的内存不足
windows中的内存不足,可按下列方法进行检查和处理:
1、首先应检查windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现“内存不足”的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括tsr内存驻留程序,将windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致;
2、如果问题没有解决,清除或保存clipboard(剪贴板)的内容,使用controlpanel desktop选项将墙纸(wallpaper)设置为none;
3、如问题仍存在,可用pif编辑器编辑pif文件,增大pif文件中定义的memoryrequirements:kb required的值;在标准模式下,选择prevent programswitch,该开关选项打开后,退出应用程序返回windows;如果是386增强模式,则要将display usage设置成fullscreen(全屏幕方式),将execution设置为exclusive,将video memory设置为尽可能低的方式;
4、如果问题仍存在,则重新开机进入windows系统,并且确保在“启动”图标中没有其它无关的应用软件同时启动运行,在win.ini文件中也没有run或load命令加载的任何无关的应用程序。在平时,出现“内存不足”的问题一般可以按以下办法处理。首先,退出那些不需要运行的应用程序,然后,再检查系统的可用资源为多少。如果可用资源大于30%,一般可以运行新的程序。
当有多个应用程序在系统中运行时,可以退出一个,检查一次可用资源,如果某个应 用程序在退出前后,可用资源的百分比没有变化。说明这个应用程序没有释放它所占用的资源。如果要收回这些没有释放的资源,只能退出 windows后,再重新进入windows。为了确保在启动进入windows时系统的可用资源足够,在“启动”图标中应该没有无关的应用软件同时启动运行,在win.ini文件中也没有由run或load命令加载的任何无关的应用程序,因为这些同时启动的无关应用程序可能已经占用了很多资源,使得要使用的应用程序无法运行.一般说来,经过这样处理,就不会出现“内存不足”的问题了。
二、dos下的内存不足
在运行dos应用程序时出现“ out of memory”(内存不足)的故障,可按以下方法进行检查和处理:
1、检查系统是否提供对扩充内存的支持,必须保证config.sys文件中的emm386.exe命令中含有ram参数,关于ram参数的设置请参考相关文章,这里就不述叙;
2、 如果故障仍存在,检查dos内核程序与其它运行的应用程序是否兼容,某些程序是否占用了大量的常规内存,并作出相应的处理。举个例子:一次我在运行wps 时,屏幕显示“内存不够”,系统无法运行。考虑到在运行wps之前曾执行过一些其它程序,可能是这些程序没有完全从内存中退出,于是重新启动,运行金山汉字系统,wps 编辑软件仍无法进入,用dos 6.22的mem命令查看内存,仅剩200kb左右的空间,且chlib文件占用主内存达255kb,即字库放在了常规内存中,而金山系统是应该可以自动使用扩展内存存放字库的,查看系统配置情况,在config.sys中设有:device=c:doshimem.sysdos=high这就是说,dos内核程序调入扩展内存后,虽然扩大了可用主内存空间,但是由于扩展内存与金山系统发生冲突,以致汉字库无法载入扩展内存。解决的办法有两种:
1、去掉dos=high设置,将dos内核程序从扩展内存撤出,即可正常运行。
2、将“/device=c:doshimem.sys”改为“/device=c:doshimem.sys/int15=320”,因金山系统使用的是扩展内存的低端,这一区域若有其它程序驻留,字库就不能正常载入,利用int15参数给系统先预留出一部分传统的扩展存储器(即不由xms规范管理而由int15直接使用的扩展存储器),字库和dos内核都可使用扩展内存了,这样设置之后,在金山汉字系统状态下可用的主内存空间可达512kb,比不设置时多出250kb左右。
解决内存不能为read的问题的最简单的办法:
1、硬件上的原因,主要是内存条不兼容,更换内存。
2、系统或其它软件引起的,可用下述方法处理:
(1)系统本身有问题,及时安装官方发行的补丁,必要时重装系统。
(2)病毒问题,杀毒;杀毒软件与其它软件冲突,卸载有问题的软件。
(3)运行regedit进入注册表。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD91972}。将其他的删除。
(4)试用命令排除
开始-运行-输入cmd--回车,在命令提示符下输入下面命令
for%1in(%windir%\system32\*。dll)doregsvr32。exe/s%1
常见的一些内存故障汇总
故障一:内存条与主板插槽接触不良、内存控制器出现故障。表现为:打开主机电源后屏幕显示Error:UnabletoControlA20Line出错信息后死机;显示器有黑屏现象,不自检;主机有报警,注意主板的BIOS不同不同的报警方式。
解决方法:仔细检查内存条是否与插槽保持良好接触或更换内存条,仔细观察主板是否有变形现象。
故障二:自检通过。在Dos状态下运行应用程序因占用的内存地址冲突,而导致内存分配错误,屏幕出现MemoryA11ocationError的提示。
解决方法:因Confis.sys文件中没有用Himem.sys、Emm386.exe等内存管理文件设置Xms.ems内存或者设置不当,使得系统仅能使用640KB基本内存,运行的程序稍大便出现OutofMemory(内存不足)的提示,无法操作。这些现象均属软故障,编写好系统配置文件Config.sys后重新启动系统即可。
故障三:Windows系统中运行的应用程序非法访问内存、内存中驻留了太多应用程序、活动窗口打开太多、应用程序相关配置文件不合理等原因均能导致屏幕出现许多有关内存出错的信息。
解决方法:此类故障必须采用清除内存驻留程序、减少活动窗口、调整配置文件(INI),重装系统和应用程序等办法来处理。
故障四:Windows系统中运行DOS状态下的应用软件(如DOS下运行的游戏软件等)时,因软件之间分配、占用内存冲突出现黑屏、花屏、死机现象。
解决办法:退出Windows系统,进入DOS状态,再运行应用程序。
故障五:程序有病毒,病毒程序驻留内存、CMOS参数中内存值的大小被病毒修改,将导致内存值与内存条实际内存大小不符、内存工作异常等现象。
解决办法:采用杀毒软件消除病毒;CMOS中参数被病毒修改,先将CMOS短接放电,重新启动机器,进入CMOS后仔细检查各项硬件参数,正确设置有关内存的参数值。
故障六:电脑升级进行内存扩充,选择了与主板不兼容的内存条。
解决方法:首先升级主板的BIOS,看看是否能解决问题,如果仍无济于事,就只好更换内存条了。
|
|
|
|
|
|
|