一种内存泄露检测方法和装置的制作方法

文档序号:6582124阅读:182来源:国知局
专利名称:一种内存泄露检测方法和装置的制作方法
技术领域
本发明涉及一种内存泄露检测的方法及其装置,尤其涉及在通讯网络中的内存泄 露检测方法及其装置。
背景技术
内存泄漏是程序运行时的一种常见错误。一般指由于程序设计疏忽或错误造成程 序运行时未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而 是应用程序失去对分配给该程序的内存的控制,因而造成了内存的浪费。大多数的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的并且使用完 应当相应释放的内存。根据系统要求,内存往往被分配成划分成多个内存块,每个内存块的 大小可以是任意的。如图1所示,多个内存块可以通过指针连成链,然后经过相应的内存块 链头组成环,以便系统进行管理。应用程序一般使用mall0C,reall0C,new等函数从堆中分 配到一个内存块。被分配给进程的内存块被从内存块链中摘除,并由操作系统将该内存块 链接到该进程的进程控制块。而当进程运行结束时,应当调用对应的free或delete函数 释放该内存块,将该内存块与进程控制块分离,重新插入内存块链。否则,该内存块就无法 被其他应用程序再次使用。如果进程向系统请求归还内存块而系统由于各种原因未能将改内存块插入内存 块链,或者进程结束却由于程序设计原因未将内存块归还给系统,都有可能发生本文中提 到的内存泄漏。内存泄漏会导致系统可用内存的数量,从而降低计算机的性能。如果系统 不对内存泄露进行检测和处理,则可能导致随着时间的流失消耗掉越来越多的内存。最终, 在最糟糕的情况下,过多的可用内存被分配掉而造成全部或部分设备停止正常工作,或者 应用程序崩溃。可见,如何有效地监控内存使用情况,及时找到内存泄露点是内存管理中需要考 虑的重要问题。

发明内容
为解决现有技术中的上述问题,本发明提出了一种新的进行内存检测的方案。通 过实施本发明的技术方案可以快速准确的找到当前的内存泄漏点,有效的降低可用内存块 的流失,提高系统运行效率,避免系统崩溃。根据本发明的一个具体实施例,提供了一种内存泄露检测方法,其中,包括以下步 骤a.将分配给进程的内存块划分多个内存类,分别记录每个所述内存类的内存块申请信 息和内存块释放信息,以及每个内存块的地址信息;b.基于每个所述内存类的所述内存块 申请信息和所述内存块释放信息以及所述地址信息,确定内存泄露点。根据本发明的一个具体实施例,提供了一种内存泄露检测装置,其特征在于,包 括信息统计装置,用于将分配给进程的内存块划分多个内存类,分别记录每个所述内存类 的内存块申请信息和内存块释放信息,以及每个内存块的地址信息;泄露点确定装置,用于基于每个所述内存类的所述内存块申请信息和所述内存块释放信息以及所述地址信息,确 定内存泄露点。根据本发明的内存检测方法和装置,可以以内存类为单位对内存块的申请和释放 信息进行统计,从而高效定位内存泄漏点。尤其是尽快找到占用较多可用内存块较多的内 存泄漏点。如果进一步对找到的内存泄漏点进行跟踪和错误修复,就可以有效的解决内存 泄漏现象的发生,确保系统的正常运行。


通过阅读以下参照附图对非限定性实施例所做的说明,本发明的其他方面、特征、 优势将会更为明显。其中,相同或相似的参考标号表示相同或对应的特征。图1示出了现有技术中内存块链的结构。图2示出了根据本发明的一个具体实施例的内存泄漏检测方法的流程图;图3示出了根据本发明的一个具体实施例的内存泄漏点确定方法的流程图;图4示出了根据本发明的一个具体实施例的内存泄漏检测方法的流程图;图5示出了根据本发明的一个具体实施例的内存泄漏检测装置的框图。
具体实施例方式以下参照附图对本发明中的内存泄漏检测方法进行说明。需要说明的是,以下的各实施例中,将主要以内存块链的内存管理结构为例对本 发明的技术方案展开详细描述。本领域技术人员应当了解,在现有技术中,系统也使用其它 模式对内存进行管理。因此,本领据技术人员根据本文中的描述,可以不经创造性劳动的将 本发明的技术方案应用于内存块链以外的其它内存管理结构,而这种应用必然落入随附权 利要求书的保护范围中。图2示出了根据本发明的一个具体实施例的内存泄漏检测方法的流程图。以下参 照图2对本发明的第一方面进行的第一实施例进行详细描述。在步骤Sl中,根据内存块的长度将分配给进程的内存块划分多个内存类,分别记 录每个所述内存类的内存块申请信息和内存块释放信息,以及每个内存块的地址信息。具 体的,可以先划分内存类,继而借助建立内存统计表的方法完成信息统计。本领域技术人员应当理解,本发明的技术方案通过对不同内存块分类后,以类为 单位进行信息统计以实现快速定位内存泄漏点的目的。可以理解,这种方法相较现有技术 中需要对进程使用的内存块逐一进行检测更为高效。优选的,可以通过内存块长度对内存 进行分类。一些现有的内存分配方案会将根据内存块长度将内存块组合为多个内存块链。 在内存泄漏检测中,使用同样的内存块长度分类方案对内存块进行分类,可以使程序设计 更加简单,有利于程序语言的优化组织。优选的,可以以2" byte为单位对内存块长度进行 分类,即将长度在2114至2n Byte之间的内存块归于同一类。接着,基于上述确定的分类建立内存统计表。内存统计表中应当按类表明该类内 存块的内存块申请信息和内存块释放信息。优选的,内存块申请信息为该类内存块的申请 次数,内存块释放信息为该类内存块的内存块释放次数,内存块地址信息为当前内存块占 用的地址信息。上述内存统计表的一个示意性的例子如表1所示
权利要求
1.一种内存泄露检测方法,其中,包括以下步骤a.将分配给进程的内存块划分多个内存类,分别记录每个所述内存类的内存块申请信 息和内存块释放信息,以及每个内存块的地址信息;b.基于每个所述内存类的所述内存块申请信息和所述内存块释放信息以及所述地址 信息,确定内存泄露点。
2.根据权利要求1所述的内存泄露检测方法,其特征在于,所述步骤a包括-根据内存块长度将分配给进程的内存块划分多个所述内存类。
3.根据权利要求2所述的内存泄露检测方法,其特征在于,所述步骤a包括-定义内存统计表,用于以所述内存类为单位记录所述内存块申请信息和所述内存块 释放信息。
4.根据权利要求3所述的内存泄露检测方法,其特征在于,所述步骤b包括bl.以类为单位,基于所述内存块申请信息和所述内存块释放信息确定待查内存块;b2.分别检查每个所述待查内存块,并根据所述待查内存块对应的所述地址信息确定 内存泄露点。
5.根据权利要求4所述的内存泄露检测方法,其特征在于,所述内存块申请信息为内 存块申请次数,所述内存块释放信息为内存块释放次数,所述步骤bl包括-将所述内存块释放次数与所述内存块申请次数不相等的所述内存类中的内存块确定 为所述待查内存块。
6.根据权利要求5所述的内存泄露检测方法,其特征在于,所述内存统计表以所述内 存类为单位记录所述内存块的地址信息。
7.根据权利要求6所述的内存泄露检测方法,其特征在于,所述内存统计表记录每个 所述内存块的长度,所述步骤还包括-对所述长度大于第一预定值的所述代查内存块进行检查,确定内存泄露点。
8.根据权利要求6所述的内存泄露检测方法,其特征在于,所述内存统计表记录每个 所述内存块的占用时间,所述步骤还包括-对所述占用时间大于第二预定值的所述代查内存块进行检查,确定内存泄露点。
9.一种内存泄露检测装置,其特征在于,包括信息统计装置,用于将分配给进程的内存块划分多个内存类,分别记录每个所述内存 类的内存块申请信息和内存块释放信息,以及每个内存块的地址信息;泄露点确定装置,用于基于每个所述内存类的所述内存块申请信息和所述内存块释放 信息以及所述地址信息,确定内存泄露点。
10.根据权利要求9所述的内存泄露检测装置,其特征在于,所述信息统计装置还用于 根据内存块长度将分配给进程的内存块划分多个所述内存类。
11.根据权利要求10所述的内存泄露检测装置,其特征在于,所述信息统计装置还用 于定义内存统计表,用于以所述内存类为单位记录所述内存块申请信息和所述内存块释放 fn息ο
12.根据权利要求11所述的内存泄露检测装置,其特征在于,所述泄露点确定装置包括待查内存块确定装置,用于以类为单位,基于所述内存块申请信息和所述内存块释放信息确定待查内存块;检查装置,用于分别检查每个所述待查内存块,并根据所述待查内存块对应的所述地 址信息确定内存泄露点。
13.根据权利要求12所述的内存泄露检测装置,其特征在于,所述内存块申请信息为 内存块申请次数,所述内存块释放信息为内存块释放次数,所述待查内存块确定装置还用 于将所述内存块释放次数与所述内存块申请次数不相等的内存类中的内存块确定为所述 待查内存块。
14.根据权利要求13所述的内存泄露检测装置,其特征在于,所述内存统计表以所述 内存类为单位记录所述内存块的地址信息。
15.根据权利要求14所述的内存泄露检测装置,其特征在于,所述内存统计表记录每 个所述内存块的长度,所述检查装置还用于对所述长度大于第一预定值的所述代查内存块 进行检查,确定内存泄露点。
16.根据权利要求14所述的内存泄露检测装置,其特征在于,所述内存统计表记录每 个所述内存块的占用时间,所述检查装置还用于对所述占用时间大于第二预定值的所述代 查内存块进行检查,确定内存泄露点。
全文摘要
本发明旨在提供一种内存泄露检测方法,其中,包括以下步骤将分配给进程的内存块根据长度划分多个内存类,分别记录每个内存类的内存块申请信息和内存块释放信息,以及每个内存块的地址信息;基于每个所述内存类的内存块申请信息和内存块释放信息以及地址信息,确定内存泄露点。通过本发明所提供的方法及其相应装置,可以有效地检测到系统中的内存泄漏点,确保程序的稳定运行。
文档编号G06F9/50GK102053868SQ20091019827
公开日2011年5月11日 申请日期2009年11月4日 优先权日2009年11月4日
发明者姚欣, 张少华, 方涛 申请人:突触计算机系统(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1