查看完整版本: 什么是內存泄漏

nancofung 2007-9-13 15:42

什么是內存泄漏

在測試軟件時,發現客戶端運行很慢,有大佬說:可能是客戶端出現內存泄漏。請各位高手幫忙解釋一下“內存泄漏”是什么意思?

fishy 2007-9-14 14:59

百度一下。。。你就知道。。。

puchonghui 2007-9-14 20:28

所谓的内存泄漏可以理解为内存单元逐渐被无用的数据占用
在c c++里可以通过内存单元没有释放引起
java里可以通过 未对作废数据内存单元的引用置null引起

tingtingc 2007-9-15 12:01

分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。
例如C语言编程中用到带有指针的运算,因为C指针是直导内存的,当运行完程序而没释放内存的话,那段内存就会泄露;同理会出现在C++中;所以malloc后一定要free,new了之后一定要delete,creatDC之后一定要deleteDC的。

namedxf 2007-9-21 11:41

内存泄漏可以分为4类:

1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

halwi 2007-9-24 20:46

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

yu_xiulan 2007-10-6 12:50

个人理解:在编程过程中,如果我们在堆中动态审请了一块内存,在使用完这块内存后要及时把这块内存释放掉。如果没有及时释放,操作系统会认为这块内存仍然被使用,这就造成了内存泄露。这是程序开发人员必须要注意的问题。操作系统都有自己的内存管理和分配机制,如果内存管理策略不是很好就会引发内存碎片的存在。若不及时进行碎片整理,也将造成内存泄露。

yu_xiulan 2007-10-6 12:55

个人理解:在进行程序开发过程中,如果在堆中动态审请了一块内存,在对这块内存使用完毕后要及时释放掉,否则就会造成内存的泄露。操作系统在进行内存管理时,可能会引起内存碎片的存在,如果不对这些碎片及时的进行回收也将造成内存泄露。

xndy826 2007-10-12 15:31

听说,c/c++,java等语言存在内存泄露的隐患,C#语言机制好像就没有这方面的担忧,是这样嘛?

ghostystep 2007-10-21 18:50

一个比较简单的判断内存泄漏的方法,看一下你的程序所占用的private bytes是多少,
如果一直增加,也就说明有内存泄漏。

performance monitor里面可以检测private bytes的变化情况。

Seu_why 2007-10-22 15:26

[url]http://hi.baidu.com/asand/blog/item/c620b1efb1aacf15fcfa3cff.html[/url]

belie 2007-10-23 12:07

好,学习!!!!!

muyang327 2007-10-25 14:18

看了各位的回复又学到了点东西。

wangxuan0529 2007-11-14 20:35

分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。
最好的防止内存泄露的方法就是动态审请的那块内存在使用完毕后一定要及时释放掉。内存泄露是使用指针时很容易犯的一个错误。与内存泄露相似的还有文件泄露,它是指文件打开后一直没有关闭,所以在程序中文件打开和关闭应该是成对出现的。

zhao.nina 2007-11-14 22:28

我想内存泄漏在java 里面的情况应该会好些,java里面有个garbage collection(垃圾回收器),java虚拟机每隔一段时间就会去查看每一块有new分配的内存空间,看它指向的有效引用是否存在,如果这个引用不存在,系统就会自动将这块空间归入空闲内存区.

yunxiz 2007-11-16 12:26

就是霸占着资源不放手,程序引起的错误

binmumian 2007-11-27 15:55

学习一下,长点知识

x379937330 2008-1-24 11:46

学习了:victory:

xjs19841125 2008-2-16 10:36

运行速度慢不一定就是内存泄露,也有可能是运算上的问题,如果是B/S或C/S系统有可能是网络或服务器本身的瓶颈,还需要针对实际情况进行考虑。内存泄露一般会伴随程序出现异常,比如:访问无效地址错误。。。等。内存泄露的测试成本很高,一般都由开发人员测试,测试人员也可以通过调试工具、或者专门的内存泄露测试工具来进行检测。

查无此人 2008-3-14 17:31

[quote]原帖由 [i]tingtingc[/i] 于 2007-9-15 12:01 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=718117&ptid=90489][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发 ... [/quote]
说得很清楚了:lol

yaojingisababy 2008-3-27 15:33

学到不少,谢谢

owelowel 2008-4-10 14:39

是不是内存被无用的数据占满了而没有释放啊!

hust208 2008-6-12 12:06

好东西,又学了一下!!

kaka_330 2008-6-25 17:36

由名字很难联想到真实定义:L
页: [1]
查看完整版本: 什么是內存泄漏