一种判断内存泄露的系统及方法技术方案

技术编号:4053616 阅读:356 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种判断内存泄露的方法,包括步骤:针对程序中的每个函数判断函数申请内存时,累计该名称的函数申请的内存容量和申请的次数;判断函数释放内存时,将该名称的函数累计申请的内存容量减去所释放内存的容量,在所述累计申请次数中减去释放内存的次数;将不同名称的函数申请的内存容量和次数进行以内存容量为优先的递减排序;根据不同名称的函数累计申请的内存容量和次数确定内存泄露程度的等级并输出。此外,本发明专利技术还提供了一种实现上述方法的系统。以实现按照内存申请的次数对内存分配、释放信息的排序,将程序员从大量繁琐的分析工作中解放出来。

【技术实现步骤摘要】

本专利技术涉及。
技术介绍
内存泄露简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般 表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。一般我 们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存 块的大小可以在程序运行期决定),使用完后必须显示释放的内存。C语言的应用程序一般 使用malloc,realloc, new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的 调用free或delete释放该内存块,否则,这块内存就不能被再次使用,就说这块内存泄漏 了。申请号为200810084501. 7的中国专利公开了一种内存泄露检测装置及方法,该 专利技术可将内存分配和释放的信息(如内存分配的地址、大小、调用模块、文件和行数)记录 到日志文件中,并根据所述信息统计出未释放内存的次数和大小,最终输出日志文件至终 端,方便程序员进行程序调试。该专利技术目前存在的问题是,由于输出至日志文件的内存分配 和释放的信息以及未释放内存的次数和大小是无序排列的,如果存在大量的上述信息,程 序员则需要进行大量繁琐的分析工作。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供,以实现 按照内存申请的次数对内存分配、释放信息的排序,将程序员从大量繁琐的分析工作中解 放出来。本专利技术提供的一种判断内存泄露的系统,其特征在于,包括初始化模块101,用于定义一种空间类型及该空间类型的空间;管理模块102,用于判断所述程序中的函数是否申请内存;统计模块103,用于统计所述程序中的不同函数累计申请内存的大小和次数,并在 将所述累计申请内存的大小和次数记录在上述空间中后,将该程序不同函数申请内存的次 数按照从多到少的顺序依次排列;输出模块104,用于将上述不同函数累计申请内存的大小和次数输出。上述判断内存泄露的系统,其特征在于,所述统计模块103包括一比较单元1031, 用于将上述程序中的不同函数申请内存的大小和次数与预先设置的阙值相比较,划分出内 存泄露程度等级;所述阙值可以为函数申请的内存大小区间的端值。本专利技术提供的一种判断内存泄露的方法,其特征在于,包括步骤A、针对程序中的每个函数,包括判断函数申请内存时,累计该名称的函数申请的内存容量和申请的次数;判断函数释放内存时,将该名称的函数累计申请的内存容量减去所释放内存的容 量,在所述累计申请次数中减去释放内存的次数;B、将不同名称的函数申请的内存容量和次数进行以内存容量为优先的递减排 序;C、根据不同名称的函数累计申请的内存容量和次数确定内存泄露程度的等级并 输出。上述的方法,其特征在于,步骤B所述确定内存泄露程度的等级的步骤包括预先设置不同的内存泄露程度的等级对应函数申请的不同内存容量和次数的区 间值;根据步骤B所述函数申请的内存容量和次数对应的预先设置的区间值确定其内 存泄露程度的等级。上述的方法,其特征在于,步骤A之前还包括预先定义一内存空间,步骤A所述函数申请的内存容量和申请的次数对应该函数的名称存储在所述内 存空间内。上述的方法,其特征在于,所述对应该函数的名称存储在所述内存空间内的步骤 包括在所述内存空间中确定一空闲位置;以所述函数名称命名该位置;在该位置进行所述函数申请的内存容量和申请次数的存储。上述的方法,其特征在于,步骤B所述输出为将不同名称的函数累计申请的内存容量和次数、内存泄露程度的等级以写入日志 文件的方式输出由上可以看出,本专利技术通过自动记录程序中不同函数申请内存的大小和次数,快 速、高效地完成对程序中不同函数内存分配的统计,根据不同名称的函数累计申请的内存 容量和次数确定内存泄露程度的等级,完成对程序中不同函数存在内存泄露风险程度的分 析,并通过对不同函数申请内存的次数的排序,使输出后的判断内存是否泄露的数据不再 繁杂无序,帮助程序员从大量繁琐的分析工作中解放出来。附图说明图1为本专利技术判断内存泄露的系统结构图;图2为本专利技术判断内存泄露的方法流程图。具体实施例方式下面以C语言应用程序为例,结合图1对本专利技术提供的一种判断内存泄露的系统 进行详细说明。如图1所示,本专利技术提供的一种判断内存泄露的系统主要由初始化模块101,管理 模块102,统计模块103和输出模块104组成。其中初始化模块101用于初始定义一种空间类型,并根据上述空间类型定义一空间。根据此种空间类型定义的空间是用来记录程序中申请内存的函数名称以及该函数所申请 的内存的大小和未被释放的内存申请次数。管理模块102用于判断程序中的函数是否申请或释放内存。统计模块103用于统计所述程序中的各个函数的内存申请信息,并将该内存申请 信息记录在上述空间中。所述内存申请信息包括函数名、计算该函数申请内存的大小和次 数。其中,在记录的过程中,会根据不同函数申请内存的大小按照从多到少的顺序进行动态 排序。统计模块103包括一比较单元1031,用于将统计模块103统计出的同一函数申请 内存的大小和次数与预先设置的阙值相比较,划分出内存泄露程度等级。所述阙值可以为 函数申请的内存大小和次数区间的端值。关于内存泄露程度等级的划分将在下文详细介 绍。针对同一函数名,统计模块103在记录该函数申请内存的大小时,将该函数申请 到的内存大小进行累加,将该函数释放的内存从其申请到的内存大小中减去。统计模块103在计算函数的内存申请次数时,函数每申请一次内存,将其申请内 存的次数加1,函数每释放一次内存,将其申请内存的次数减1。输出模块104用于从上述空间中读取上述内存申请信息并输出到终端。在本实施 例中,可以通过日志组件将上述内存申请信息保存至日志文件后输出给终端(例如电脑显 示器、打印机等输出设备),以供程序开发人员使用。下面结合图2对本专利技术提供的一种判断内存泄露的方法进行详细说明。步骤101 初始定义一用来记录程序中函数累计申请内存大小的空间类型。在本实施例中,可采用如下列代码定义上述类型typedef MEM0RY_M0N //类型名称{UINT 32size ;//用于记录程序中的函数累计申请的内存大小char*function_name ; //用于记录程序中申请内存的函数名称}步骤102 定义一个上述类型的空间,即MEM0RY_M0N类型的数组。在本实施例中,可采用如下列代码定义上述数组MEM0RY_M0N monitor_array ; //MEM0RY_M0Nmonitor_array 数组中的元素数量。本实施例中的m0nit0r_array[]数组元素数量为51,即其数组索引值为0 50。步骤103 判断程序中的函数是否申请内存若是,则进入步骤104 ;否则,结束对 该函数是否造成内存泄露的判断。在本实施例中,以程序中的函数是否调用0S_MallOC()函数(0S_MallOC()函数从pi = 0S_Malloc() (50) ;//调用函数 os_malloc ()申请一块大小为50的内存操作系统中分配指定大小的内存块)来申请内存作为判断程序中的函数是否申请内存的 依据,如下列代码所示为调用0S_MallOC()函数的某函数#define 0S_MalIoc (size) //定义 0S_Malloc ()函数void test_l ()/本文档来自技高网...

【技术保护点】
一种判断内存泄露的系统,其特征在于,包括:初始化模块(101),用于定义一种空间类型及该空间类型的空间;管理模块(102),用于判断所述程序中的函数是否申请内存;统计模块(103),用于统计所述程序中的不同函数累计申请内存的大小和次数,并在将所述累计申请内存的大小和次数记录在上述空间中后,将该程序不同函数申请内存的大小按照从多到少的顺序依次排列;输出模块(104),用于将上述不同函数累计申请内存的大小和次数输出。

【技术特征摘要】

【专利技术属性】
技术研发人员:邱海燕
申请(专利权)人:北京海泰方圆科技有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1