一种检测内存泄露的方法

文档序号:6573913阅读:352来源:国知局
专利名称:一种检测内存泄露的方法
技术领域
本发明涉及一种4企测内存泄露的方法。
技术背景一般内存泄漏是指堆内存的泄漏。堆内存是程序从堆中分配的, 使用完后必须显式释放的内存,否则,这块内存既不能被操作系统回 收,也无法被程序再次使用,即产生了内存泄漏。内存泄漏可能导致程序运行异常,对长期运行的程序影响更大。 长时间的内存泄漏测试与产品尽快上市的需求常常矛盾,而实际情况 往往是测试时间不足。緩慢出现的小内存块泄漏经常无法在测试中被 发现,可能在客户使用足够长的时间后出现问题。在这种情况下,需 要针对内存泄漏建立专门的机制来保存错误环境,帮助开发人员复现 环境,否则只能通过排查代码来寻找故障点,会耗费大量人力。现有 的检测内存泄露的方法根据内存的生存时间是否过长或者申请释放是 否成对来判断是否发生了泄漏,如果存在内存泄漏,当剩余内存的大 小进入警界范围时,通过保存内存状态以备将来复现故障,并释放泄 漏的内存,使程序能获得足够多的内存正常运行。这些实现方法有一个缺点由于一些动态申请的内存块在程序运行期间始终不会^皮释力文, 它们的生命周期等同于程序的生命周期,按上述方法这类内存块都会 被误判为内存泄漏。由于内存泄漏检测模块还会释放被认为发生了泄 漏的内存块以使程序能获得足够多的内存正常运行,若释放了这些被 误判为内存泄漏的内存而导致程序正常使用的内存块被错误释放掉, 就可能产生程序异常等严重后果。发明内容本发明要解决的技术问题是提供一种能提高内存泄露4企测准确率 的检测内存泄露的方法。本发明解决其技术问题所采用的技术方案是一种检测内存泄露的方法,其特征在于,包括第一步,建立动态存储内存块信息的链表,并设定同一申请位置 长生存时间内存块数量阈值;第二步,遍历所述链表,检查各链表元素存储的内存块信息得到 各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间 内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时 间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则 认为所述各长生存时间内存块发生了内存泄露。上述方案中,所述同 一 申请位置是指进行内存块申请的同 一文件 的同一行且同一列的位置。上述方案中,所述生存时间是指检查内存块信息的当前时间与所 述内存块的分配时间之差。上述方案中,所述各长生存时间的内存块是指各生存时间超过预 设的生存时间门限的内存块。上述方案中,所述内存块信息包括指向所述内存块的指针、所述 内存块的大小、所述内存块的分配时间以及申请所述内存块的位置信 自上述方案中,所述内存块的位置信息包括申请所述内存块的文件 的文件名、行号及列号,所述位置信息通过对应的编号存储。本发明的有益效果主要表现在本发明提供的技术方案通过设定 同 一申请位置长生存时间内存块数量阈值,在小幅增加额外开销的前 提下,提高了内存泄露检测的准确率。


图1为本发明检测内存泄露的方法流程图。
具体实施方式
下面结合附图对本发明作进一步的描述。如图l所示,建立动态存储内存块信息的链表并设定同一申请位 置长生存时间内存块数量阀值M,所述内存块信息包括指向所述内存 块的指针、所述内存块的大小、所述内存块的分配时间以及申请所述 内存块的位置信息,所述内存块的位置信息包括申请所述内存块的文 件的文件名、行号及列号,所述位置信息通过对应的编号存储。申请 内存块时,将对应的内存块信息加入链表,释放已申请的内存块时, 将对应的内存块信息从链表中删除;进行内存泄露检测时,遍历所述 链表,检查各*元素存储的内存块信息得到各内存块的生存时间, 即计算检查内存块信息的当前时间与所述内存块的分配时间之差,而 后将各长生存时间内存块根据其被申请的位置分类,若同一申请位置 上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存 时间内存块数量阈值M,则认为所述各长生存时间内存块发生了内存 泄露;其中,同一申请位置是指进行内存块申请的同一文件的同一行 且同一列的位置,长生存时间的内存块是指生存时间超过预设的生存 时间门限的内存块。若M-2,且拥有同一申请位置的3个内存块属于 长生存时间的内存块,则这三个内存块被认为是发生了内存泄露。
权利要求
1、 一种检测内存泄露的方法,其特征在于,包括第一步,建立动态存储内存块信息的链表,并设定同一申请位置 长生存时间内存块数量阈值;第二步,遍历所述链表,检查各链表元素存储的内存块信息得到 各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间 内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时 间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则 认为所述各长生存时间内存块发生了内存泄露。
2、 如权利要求1所述的检测内存泄露的方法,其特征在于所述 同 一 申请位置是指进行内存块申请的同 一文件的同 一行且同 一列的位置。
3、 如权利要求2所述的检测内存泄露的方法,其特征在于所述 生存时间是指检查内存块信息的当前时间与所述内存块的分配时间之 差。
4、 如权利要求3所述的检测内存泄露的方法,其特征在于所 述各长生存时间的内存块是指各生存时间超过预设的生存时间门限的 内存块。
5、 如权利要求1至4其中之一所述的检测内存泄露的方法,其特 征在于所述内存块信息包括指向所述内存块的指针、所述内存块的 大小、所述内存块的分配时间以及申请所述内存块的位置信息。
6、 如权利要求5所述的检测内存泄露的方法,其特征在于所述 内存块的位置信息包括申请所述内存块的文件的文件名、行号及列号, 所述位置信息通过对应的编号存储。
全文摘要
本发明公开了一种检测内存泄露的方法,第一步,建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;第二步,遍历所述链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块数量阈值,则认为所述各长生存时间内存块发生了内存泄露。本发明所述技术方案在小幅增加额外开销的前提下,提高了内存泄露检测的准确率。
文档编号G06F11/36GK101145128SQ20071007494
公开日2008年3月19日 申请日期2007年6月13日 优先权日2007年6月13日
发明者李大夜, 刚 陈 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1