怎么知道电脑内存泄露|电脑内存泄漏怎么办

怎么知道电脑内存泄露|电脑内存泄漏怎么办

1. 电脑内存泄漏怎么办

亲,别着急。

1.首先看看是不是内存坏了,因为没有内存电脑是开不了的。你可以换上以前的内存试试,看看能不能开机。

2.不要接电源且把你的电池卸掉,把主盘上的静电放了(按开机键5秒即可放电),然后装好电脑开机。如果还不行的话就可能是板子坏了,可能是板子上的某个电容被击穿,也可能是线路烧了,这个具体你就要去修了。建议去维修点。亲赶快试试吧,祝你好运

2. 如何发现内存泄露

要想检测内存泄漏,就必须对程序中的内存分配和释放情况进行记录,所能够采取的办法就是重载所有形式的operator new 和 operator delete,截获 new operator 和 delete operator 执行过程中的内存操作信息。下面列出的就是重载形式

void* operator new( size_t nSize, char* pszFileName, int nLineNum )

void* operator new[]( size_t nSize, char* pszFileName, int nLineNum )

void operator delete( void *ptr )

void operator delete[]( void *ptr )

我们为 operator new 定义了一个新的版本,除了必须的 size_t nSize 参数外,还增加了文件名和行号,这里的文件名和行号就是这次 new operator 操作符被调用时所在的文件名和行号,这个信息将在发现内存泄漏时输出,以帮助用户定位泄漏具体位置。对于 operator delete,因为无法为之定义新的版本,我们直接覆盖了全局的 operator delete 的两个版本。

在重载的 operator new 函数版本中,我们将调用全局的 operator new 的相应的版本并将相应的 size_t 参数传入,而后,我们将全局 operator new 返回的指针值以及该次分配所在的文件名和行号信息记录下来,这里所采用的数据结构是一个 STL 的 map,以指针值为 key 值。当 operator delete 被调用时,如果调用方式正确的话(调用方式不正确的情况将在后面详细描述),我们就能以传入的指针值在 map 中找到相应的数据项并将之删除,而后调用 free 将指针所指向的内存块释放。当程序退出的时候,map 中的剩余的数据项就是我们企图检测的内存泄漏信息--已经在堆上分配但是尚未释放的分配信息。

以上就是内存检测实现的基本原理,现在还有两个基本问题没有解决:

1)如何取得内存分配代码所在的文件名和行号,并让 new operator 将之传递给我们重载的 operator new。

2)我们何时创建用于存储内存数据的 map 数据结构,如何管理,何时打印内存泄漏信息。

先解决问题1。首先我们可以利用 C 的预编译宏 __FILE__ 和 __LINE__,这两个宏将在编译时在指定位置展开为该文件的文件名和该行的行号。而后我们需要将缺省的全局 new operator 替换为我们自定义的能够传入文件名和行号的版本,我们在子系统头文件 MemRecord.h 中定义:

#define DEBUG_NEW new(__FILE__, __LINE__ )

而后在所有需要使用内存检测的客户程序的所有的 cpp 文件的开头加入

#include "MemRecord.h"

#define new DEBUG_NEW

就可以将客户源文件中的对于全局缺省的 new operator 的调用替换为 new (__FILE__,__LINE__) 调用,而该形式的new operator将调用我们的operator new (size_t nSize, char* pszFileName, int nLineNum),其中 nSize 是由 new operator 计算并传入的,而 new 调用点的文件名和行号是由我们自定义版本的 new operator 传入的。我们建议在所有用户自己的源代码文件中都加入上述宏,如果有的文件中使用内存检测子系统而有的没有,则子系统将可能因无法监控整个系统而输出一些泄漏警告。

再说第二个问题。我们用于管理客户信息的这个 map 必须在客户程序第一次调用 new operator 或者 delete operator 之前被创建,而且在最后一个 new operator 和 delete operator 调用之后进行泄漏信息的打印,也就是说它需要先于客户程序而出生,而在客户程序退出之后进行分析。能够包容客户程序生命周期的确有一人--全局对象(appMemory)。我们可以设计一个类来封装这个 map 以及这对它的插入删除操作,然后构造这个类的一个全局对象(appMemory),在全局对象(appMemory)的构造函数中创建并初始化这个数据结构,而在其析构函数中对数据结构中剩余数据进行分析和输出。Operator new 中将调用这个全局对象(appMemory)的 insert 接口将指针、文件名、行号、内存块大小等信息以指针值为 key 记录到 map 中,在 operator delete 中调用 erase 接口将对应指针值的 map 中的数据项删除,注意不要忘了对 map 的访问需要进行互斥同步,因为同一时间可能会有多个线程进行堆上的内存操作。

好啦,内存检测的基本功能已经具备了。但是不要忘了,我们为了检测内存泄漏,在全局的 operator new 增加了一层间接性,同时为了保证对数据结构的安全访问增加了互斥,这些都会降低程序运行的效率。因此我们需要让用户能够方便的 enable 和 disable 这个内存检测功能,毕竟内存泄漏的检测应该在程序的调试和测试阶段完成。我们可以使用条件编译的特性,在用户被检测文件中使用如下宏定义:

#include "MemRecord.h"

#if defined( MEM_DEBUG )

#define new DEBUG_NEW

#endif

当用户需要使用内存检测时,可以使用如下命令对被检测文件进行编译

g++ -c -DMEM_DEBUG xxxxxx.cpp

就可以 enable 内存检测功能,而用户程序正式发布时,可以去掉 -DMEM_DEBUG 编译开关来 disable 内存检测功能,消除内存检测带来的效率影响。

3. 电脑内存泄漏怎么办解决

一、用系统光盘修复系统 1、设置光驱启动 Award BIOS 6.0设置 重启,按Del进入BIOS 6.0设置界面,找到Advanced Bios Features(高级BIOS参数设置)按回车进Advanced Bios Features界面,用键盘方向键盘选定First Boot Device ,用PgUp或PgDn翻页将它右边的HDD-O改为CDROM(光驱启动),按ESC,按F10,再打Y,回车,保存退出。 AMI BIOS 8.0设置 启动电脑,按Del进入AMI BIOS设置程序主界面,在上方菜单中找到“Boot”选中,回车,在打开的界面中用方向键↑↓选中“ Boot Device Priority”,回车,进到“1st Boot Device”界面,回车,进options界面,用方向键↑↓选中“CD/DVD:3S-PH……”(光驱启动),回车,按Esc,按F10,再按Y,回车,保存退出。

2、将XP安装光盘插入光驱,重启,在看到屏幕底部出现CD……字样的时候,及时按任意键,否则计算机跳过光启又从硬盘启动了。

3、首先会出现WINXP安装界面,选择“在现在安装WINXP……”,回车。

4、有的光盘出现“Windows XP 安装协议,Windows XP Professional最终用户安装协议”界面中,按下“F8”键,同意接受许可协议。

5、当出现“假如下列WINXP安装中有一个己损坏,安装程何以尝试将其修复”界面时,选“所要修复的WINXP安装”即可。 6、以下操作,按中文提示进行就可以了。二、重装系统。 ♂安全模式能进吗?进就系统还原 不行重装把 ♂系统破坏 只能重装系统吧 ♂你可能将字母打错了,应该是:Reboot and Select proper boot device or insert boot media in seiected boot device and press a key 英文意思是:重新启动并且选择适当的启动装置或者插入启动光盘.在选中启动装置后.按一个键. (1)可能是你的安装盘中缺少引导文件.而无法进入系统.需要启动盘来启动电脑. (2)系统安装失败.硬盘中根本就没有系统.(你的安装盘存在问题,建议换一张盘试试) (3)光驱坏了 (4)还有几率很小的可能,就是硬盘的数据线插口出松了.内存条和显卡重新插拔一下.以及硬盘有坏道. (5)将系统重新装一次.不要用----刚才用过的系统盘. ♂显然是装好系统后没有在BIOS里设置启动设备,启动电脑按DEL键,进入BIOS设置界面,假如是AWARD BIOS,则选择BIOS FEATURES SETUP,将BOOT SEQUENCE处改为C开头的,保存并重启;假如是AMI Bios 则选择BOOT选项卡,选Boot Device Priority,将1st Device Priority设置成为你的硬盘,保存并重启。

4. 电脑内存泄漏怎么办啊

  内存是计算机系统中的必须组件之一,如果内存出现故障,通常有以下现象:系统不定时蓝屏、死机,操作系统无法启动;上电自检提示内存错误,或者开机后主机蜂鸣器长鸣报警屏幕无显示等等。虽然内存故障很常见,但内存损坏的并不常见,多数故障都是内存条接触不良,将其拔掉后用橡皮擦拭金手指即可排除故障。  在电脑中保存的文件都是存储在硬盘中,内存是易失性存储器,关机后内存中的全部数据都会丢失。因此,更换和维修内存并不会影响到存储的文件。

5. 什么是内存泄漏?如何避免内存泄漏?

一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,calloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。

内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。尤其是在碰到错误路径的情况下更是如此。对于电脑的影响一般来说不是很大,尤其是现在动不动就是几个G的内存影响几乎可以忽略不计。但是为了电脑使用的流畅可以在关闭程序后用内存清理助手清理一下。以保证软件使用的流畅性

6. 造成内存泄漏的原因

严格意义上的内存泄露的原因只有一种:没有释放向系统申请的内存,因为不申请内存,就谈不上什么泄露,搞清楚内存泄露的原因,应当从汇编语言的角度考虑问题。

当然没有释放内存的原因是多种的:

有可能是你自己代码写的不好,忘记了释放自己代码里申请的内存,

也有可能是你使用了一个写的不好的库,库本身有问题,这里说的库不仅仅是第三方库,甚至于各种语言的运行时库也有可能出现(再高的人都免不了出BUG),还甚至于操作系统的库,因为操作系统的BUG也多的很(当然系统一般情况不会出现这些低级的错误)。

7. 内存泄露了怎么办

内存泄漏产生的原因一般是三种情况:

分配完内存之后忘了回收;

程序Code有问题,造成没有办法回收;

某些API函数操作不正确,造成内存泄漏。

  内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。

  内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。

8. 如何发现内存泄漏

手机内存是不可能泄露的,如果泄露就是你的手机中病毒了,中病毒你就可以请呃手机开发商解决这个问题,如果手机坏了的话,你可以把呃你的USB卡弄出来,然后让是你的。呃,手机售后给你修一下就可以了

9. 解决内存泄漏

1.首先,如果我们是在虚拟机中的系统,面对内存溢出与储存不足,我们可以重新磁盘大小,通过数据重新划分来解决。

2.第二,内存之所以溢出,是由于系统盘运行的程序过大,且系统盘预留空间不足,面对这种情况,我们可对c盘进行碎片整理,并对磁盘的无用程序进行清理,最后能留下1gb以上的储存空间。

3.第三,打开程序过多,如果在使用电脑过程中打开太多程序,也会导致内存溢出,从而出现卡机情况,面对这一情况,我们适当关闭一些程序即可。

4.第四,删除“启动”文件夹中的所有快捷方式,通过这一方式,可以让cpu预处理变得更快捷,从而不已产生出错的情况。

5.第五,增加系统可用磁盘,这一点可以通过庚等

10. 电脑内存泄漏怎么解决

1、开机后内存就达到百分之九十,一般为电脑病毒引起,建议下载360套装(含360杀毒软件),因为它免费。然后安装后,断开网络进行360体检、木马查杀和杀毒。以上操作进行后,按照默认提示点击即可,完全傻瓜化操作,一般不会影响你的正常使用电脑。然后不要连接网络,开机后再看内存占用率。

2、若检查后计算机没有发现问题,那一般原因是您的电脑配置较低,可以重新加装内存条,不过现在老式电脑内存条相对比新内存条贵些。

3、若不想花钱,那么尽量减少操作。比如不要同时打开多个网页;不要播放视频时进行其它操作;不要打开多个软件操作。

4、计算机硬件问题,找专业人士对计算机机箱内进行清理、除尘。但不能从根本解决问题,只能暂缓。

推荐阅读