CN101145128A - 一种检测内存泄露的方法 - Google Patents
一种检测内存泄露的方法 Download PDFInfo
- Publication number
- CN101145128A CN101145128A CNA2007100749443A CN200710074944A CN101145128A CN 101145128 A CN101145128 A CN 101145128A CN A2007100749443 A CNA2007100749443 A CN A2007100749443A CN 200710074944 A CN200710074944 A CN 200710074944A CN 101145128 A CN101145128 A CN 101145128A
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- time
- long
- living
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种检测内存泄露的方法,第一步,建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;第二步,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄露。本发明所述技术方案在小幅增加额外开销的前提下,提高了内存泄露检测的准确率。
Description
技术领域
本发明涉及一种检测内存泄露的方法。
背景技术
一般内存泄漏是指堆内存的泄漏。堆内存是程序从堆中分配的,使用完后必须显式释放的内存,否则,这块内存既不能被操作系统回收,也无法被程序再次使用,即产生了内存泄漏。
内存泄漏可能导致程序运行异常,对长期运行的程序影响更大。长时间的内存泄漏测试与产品尽快上市的需求常常矛盾,而实际情况往往是测试时间不足。缓慢出现的小内存块泄漏经常无法在测试中被发现,可能在客户使用足够长的时间后出现问题。在这种情况下,需要针对内存泄漏建立专门的机制来保存错误环境,帮助开发人员复现环境,否则只能通过排查代码来寻找故障点,会耗费大量人力。现有的检测内存泄露的方法根据内存的生存时间是否过长或者申请释放是否成对来判断是否发生了泄漏,如果存在内存泄漏,当剩余内存的大小进入警界范围时,通过保存内存状态以备将来复现故障,并释放泄漏的内存,使程序能获得足够多的内存正常运行。这些实现方法有一个缺点:由于一些动态申请的内存块在程序运行期间始终不会被释放,它们的生命周期等同于程序的生命周期,按上述方法这类内存块都会被误判为内存泄漏。由于内存泄漏检测模块还会释放被认为发生了泄漏的内存块以使程序能获得足够多的内存正常运行,若释放了这些被误判为内存泄漏的内存而导致程序正常使用的内存块被错误释放掉,就可能产生程序异常等严重后果。
发明内容
本发明要解决的技术问题是提供一种能提高内存泄露检测准确率的检测内存泄露的方法。
本发明解决其技术问题所采用的技术方案是:
一种检测内存泄露的方法,其特征在于,包括:
第一步,建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;
第二步,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄露。
上述方案中,所述同一申请位置是指进行内存块申请的同一文件的同一行且同一列的位置。
上述方案中,所述生存时间是指检查内存块信息的当前时间与所述内存块的分配时间之差。
上述方案中,所述各长生存时间的内存块是指各生存时间超过预设的生存时间门限的内存块。
上述方案中,所述内存块信息包括指向所述内存块的指针、所述内存块的大小、所述内存块的分配时间以及申请所述内存块的位置信息。
上述方案中,所述内存块的位置信息包括申请所述内存块的文件的文件名、行号及列号,所述位置信息通过对应的编号存储。
本发明的有益效果主要表现在:本发明提供的技术方案通过设定同一申请位置长生存时间内存块数量阈值,在小幅增加额外开销的前提下,提高了内存泄露检测的准确率。
附图说明
图1为本发明检测内存泄露的方法流程图。
具体实施方式
下面结合附图对本发明作进一步的描述。
如图1所示,建立动态存储内存块信息的链表并设定同一申请位置长生存时间内存块数量阈值M,所述内存块信息包括指向所述内存块的指针、所述内存块的大小、所述内存块的分配时间以及申请所述内存块的位置信息,所述内存块的位置信息包括申请所述内存块的文件的文件名、行号及列号,所述位置信息通过对应的编号存储。申请内存块时,将对应的内存块信息加入链表,释放已申请的内存块时,将对应的内存块信息从链表中删除;进行内存泄露检测时,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,即计算检查内存块信息的当前时间与所述内存块的分配时间之差,而后将各长生存时间内存块根据其被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值M,则认为所述各长生存时间内存块发生了内存泄露;其中,同一申请位置是指进行内存块申请的同一文件的同一行且同一列的位置,长生存时间的内存块是指生存时间超过预设的生存时间门限的内存块。若M=2,且拥有同一申请位置的3个内存块属于长生存时间的内存块,则这三个内存块被认为是发生了内存泄露。
Claims (6)
1.一种检测内存泄露的方法,其特征在于,包括:
第一步,建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;
第二步,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄露。
2.如权利要求1所述的检测内存泄露的方法,其特征在于:所述同一申请位置是指进行内存块申请的同一文件的同一行且同一列的位置。
3.如权利要求2所述的检测内存泄露的方法,其特征在于:所述生存时间是指检查内存块信息的当前时间与所述内存块的分配时间之差。
4.如权利要求3所述的检测内存泄露的方法,其特征在于:所述各长生存时间的内存块是指各生存时间超过预设的生存时间门限的内存块。
5.如权利要求1至4其中之一所述的检测内存泄露的方法,其特征在于:所述内存块信息包括指向所述内存块的指针、所述内存块的大小、所述内存块的分配时间以及申请所述内存块的位置信息。
6.如权利要求5所述的检测内存泄露的方法,其特征在于:所述内存块的位置信息包括申请所述内存块的文件的文件名、行号及列号,所述位置信息通过对应的编号存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100749443A CN100504811C (zh) | 2007-06-13 | 2007-06-13 | 一种检测内存泄露的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100749443A CN100504811C (zh) | 2007-06-13 | 2007-06-13 | 一种检测内存泄露的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101145128A true CN101145128A (zh) | 2008-03-19 |
CN100504811C CN100504811C (zh) | 2009-06-24 |
Family
ID=39207665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100749443A Active CN100504811C (zh) | 2007-06-13 | 2007-06-13 | 一种检测内存泄露的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100504811C (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
CN101819549A (zh) * | 2010-04-13 | 2010-09-01 | 东莞宇龙通信科技有限公司 | 一种内存泄露的定位方法及装置 |
CN102681938A (zh) * | 2012-05-15 | 2012-09-19 | 青岛海信移动通信技术股份有限公司 | 一种内存泄漏检测方法及装置 |
CN101350744B (zh) * | 2008-06-19 | 2013-08-07 | 中兴通讯股份有限公司 | 一种网络处理系统中描述符资源的检测方法及其系统 |
CN103914376A (zh) * | 2014-03-12 | 2014-07-09 | 汉柏科技有限公司 | 一种内存泄露的快速定位方法 |
CN103914355A (zh) * | 2014-03-12 | 2014-07-09 | 汉柏科技有限公司 | 对内存重复释放进行定位的方法和装置 |
CN104572460A (zh) * | 2014-12-30 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种内存泄露的检测方法和装置 |
CN105912458A (zh) * | 2016-03-28 | 2016-08-31 | 中国电力科学研究院 | 一种用于动态检测c/c++内存泄露的方法及系统 |
CN107102922A (zh) * | 2017-04-01 | 2017-08-29 | 北京三快在线科技有限公司 | 内存检测方法、装置及电子设备 |
CN109144872A (zh) * | 2018-08-20 | 2019-01-04 | 杭州迪普科技股份有限公司 | 内存泄漏的检测方法、装置、终端设备及可读存储介质 |
CN109992992A (zh) * | 2019-01-25 | 2019-07-09 | 中国科学院数据与通信保护研究教育中心 | 一种可信的敏感数据保护方法及系统 |
CN110858178A (zh) * | 2018-08-07 | 2020-03-03 | 广州小鹏汽车科技有限公司 | 一种内存回收方法、装置、设备及介质 |
CN112181830A (zh) * | 2020-09-28 | 2021-01-05 | 厦门美柚股份有限公司 | 内存泄露的检测方法、装置、终端及介质 |
CN113687942A (zh) * | 2021-07-16 | 2021-11-23 | 维沃移动通信有限公司 | 检测方法、装置及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1248114C (zh) * | 2002-06-20 | 2006-03-29 | 华为技术有限公司 | 一种软件内存泄露的检查方法 |
CN100389403C (zh) * | 2005-04-07 | 2008-05-21 | 华为技术有限公司 | 内存泄漏检测及恢复的方法 |
-
2007
- 2007-06-13 CN CNB2007100749443A patent/CN100504811C/zh active Active
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350744B (zh) * | 2008-06-19 | 2013-08-07 | 中兴通讯股份有限公司 | 一种网络处理系统中描述符资源的检测方法及其系统 |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
CN101819549A (zh) * | 2010-04-13 | 2010-09-01 | 东莞宇龙通信科技有限公司 | 一种内存泄露的定位方法及装置 |
CN101819549B (zh) * | 2010-04-13 | 2012-10-10 | 东莞宇龙通信科技有限公司 | 一种内存泄露的定位方法及装置 |
CN102681938A (zh) * | 2012-05-15 | 2012-09-19 | 青岛海信移动通信技术股份有限公司 | 一种内存泄漏检测方法及装置 |
CN102681938B (zh) * | 2012-05-15 | 2015-02-18 | 青岛海信移动通信技术股份有限公司 | 一种内存泄漏检测方法及装置 |
CN103914376A (zh) * | 2014-03-12 | 2014-07-09 | 汉柏科技有限公司 | 一种内存泄露的快速定位方法 |
CN103914355A (zh) * | 2014-03-12 | 2014-07-09 | 汉柏科技有限公司 | 对内存重复释放进行定位的方法和装置 |
CN104572460A (zh) * | 2014-12-30 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种内存泄露的检测方法和装置 |
CN105912458A (zh) * | 2016-03-28 | 2016-08-31 | 中国电力科学研究院 | 一种用于动态检测c/c++内存泄露的方法及系统 |
CN107102922A (zh) * | 2017-04-01 | 2017-08-29 | 北京三快在线科技有限公司 | 内存检测方法、装置及电子设备 |
CN110858178A (zh) * | 2018-08-07 | 2020-03-03 | 广州小鹏汽车科技有限公司 | 一种内存回收方法、装置、设备及介质 |
CN109144872A (zh) * | 2018-08-20 | 2019-01-04 | 杭州迪普科技股份有限公司 | 内存泄漏的检测方法、装置、终端设备及可读存储介质 |
CN109992992A (zh) * | 2019-01-25 | 2019-07-09 | 中国科学院数据与通信保护研究教育中心 | 一种可信的敏感数据保护方法及系统 |
CN112181830A (zh) * | 2020-09-28 | 2021-01-05 | 厦门美柚股份有限公司 | 内存泄露的检测方法、装置、终端及介质 |
CN113687942A (zh) * | 2021-07-16 | 2021-11-23 | 维沃移动通信有限公司 | 检测方法、装置及电子设备 |
CN113687942B (zh) * | 2021-07-16 | 2024-02-13 | 维沃移动通信有限公司 | 检测方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN100504811C (zh) | 2009-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100504811C (zh) | 一种检测内存泄露的方法 | |
CN100504807C (zh) | 一种通信设备系统中内存泄漏的检测方法 | |
CN103559115A (zh) | 基于smart的ssd智能监控系统 | |
CN105912458A (zh) | 一种用于动态检测c/c++内存泄露的方法及系统 | |
CN100389403C (zh) | 内存泄漏检测及恢复的方法 | |
CN102903395A (zh) | 存储器的可靠性测试方法 | |
CN104461846A (zh) | 检测应用程序耗电量的方法和装置 | |
CN105446871B (zh) | 一种资源泄漏检测方法、装置及系统 | |
CN105025141A (zh) | 终端用电量测试方法及其装置 | |
CN104244317A (zh) | 确定室内话务状态、室内话务量的方法和设备 | |
CN104916875B (zh) | 一种动力电池组故障诊断及维修方法 | |
CN101819549B (zh) | 一种内存泄露的定位方法及装置 | |
CN103954898A (zh) | 一种oled产品寿命的测试方法 | |
CN104614300A (zh) | 一种无值守的混凝土抗渗试验系统及方法 | |
CN117207778B (zh) | 一种车辆部件无损检测方法及系统 | |
CN107947974B (zh) | 一种云平台业务的网络关键链路检测方法 | |
CN101206616B (zh) | 一种图形界面程序的资源泄漏测试及问题定位方法 | |
CN102375776A (zh) | 一种嵌入式设备及其检测和定位内存泄漏的方法 | |
CN102792383B (zh) | 检测存储器元件的功能能力的方法 | |
CN103825273A (zh) | 一种以馈线联络组为单元的配电网事故全过程反演方法 | |
CN116773239A (zh) | 一种智能燃气表控制器可靠性寿命预测方法 | |
CN102163461A (zh) | 一种提高eeprom良率和读取可靠性的方法 | |
CN103885441B (zh) | 一种控制器局域网络的自适应故障诊断方法 | |
CN110888809B (zh) | 一种测试任务的风险预测方法及装置 | |
CN109668588A (zh) | 基于虚拟传感器的风冷式制冷机组传感器故障诊断方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20151118 Address after: 430223 East Lake Wuhan New Technology Development Zone Hua Hua Road, Optics Valley Industrial Park, ZTE building, building No. 3, building Patentee after: WUHAN ZHONGXING SOFTWARE CO., LTD. Address before: 518057 Nanshan District science and Technology Industrial Park, Guangdong high tech Industrial Park, ZTE building Patentee before: ZTE Corporation |