一种内存监控管理的方法及系统技术方案

技术编号:2834506 阅读:190 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种内存监控管理的方法及系统,包括:A.将内存管理模块集成到应用程序中;B.所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;C.定期上报所述内存泄露和/或非法访问信息给用户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。综上所述,本发明专利技术实施例提供了一种内存监控管理的方法及系统,通过跟踪记录内存分配使用信息,在发生内存非法使用或内存泄露时,及时记录运行时日志,为开发人员分析定位问题提供充分依据,能够节约很大一部分开发调试时间。

【技术实现步骤摘要】

本专利技术涉及软件
,尤其涉及内存监控管理

技术介绍
C语言没有内存回收管理机制和内存访问越界检查,因此应用程序开发人 员在进行程序设计时,较容易遇到内存泄漏和内存非法访问的问题。内存泄露主要由于不断分配的内存无法及时地被释放,久而久之,系统的内存耗尽。造成内存泄露的原因比较多,有可能这本身是库中的bug,也有可能是因为程序员没有正确理解它们的接口说明文档造成错用等。内存非法访问是指软件在进行内存访问时引起的错误,这种错误总体表现为两种形式 一种是读写地址引用错误;另一种是读写权限违反许可。总之,由于内存泄漏和内存非法访问是发生在程序的运行期,因此出现这类问题后,定位到相关源代码往往比较困难。
技术实现思路
本专利技术提供一种内存监控管理的方法及系统,用以解决内存泄露和内存非 法访问的定位问题。本专利技术提供了一种内存监控管理的方法,包括A、 将内存管理模块集成到应用程序中;B、 所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟 踪记录内存泄漏和/或非法访问信息;C、 定期上报所述内存泄露和/或非法访问信息给用户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。进一步地,上述方法中,所述步骤A具体包括Al、将内存管理模块源代码添加到目标工程中; A2、引入重载函数;A3、在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池;A4、设置内存检测定时器。进一步地,上述方法中,所述步骤A还包括A5、设置—-MEM—DEBUG—编译选项,该选项可以控制应用程序编译时是否 集成内存管理模块,编译目标工程。 进一步地,所述步骤A3具体包括利用边界保护方法,在内存池两端各预留预定大小的保护边界空间; 利用伙伴算法将内存划分成多个内存块,所述内存块包含内存管理信息块 和应用程序数据内存块。 所述步骤A3还包括将所述内存块同时挂接在红黑树和宏定义链表上。所述内存管理信息块中记录有内存分配的上下文信息,所述上下文信息包括源代码文件名称和所在行号。进一步地,所述步骤C具体包括定期上报所述内存泄露和/或非法访问信息给用户;用户对所述内存非法访问信息分析进行分析,定位内存非法访问代码行; 和/或,比较前后内存泄露信息的差异来诊断是否存在内存泄漏,定位内存泄漏 代码行。本专利技术还提供了一种内存监控管理的系统,包括内存管理模块,用于对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;集成模块,用于将内存管理模块集成到应用程序中;信息上报模块,用于定期上报所述内存泄露和/或非法访问信息给用户,以 便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。进一步地,上述系统中,所述集成模块具体包括源代码添加单元,用于将内存管理模块源代码添加到目标工程中; 函数重载单元,用于引入重载函数;内存池创建单元,用于在程序初始化启动时根据应用程序实际需求,创建 一预定大小的内存池。所述内存池包括两端保护边界空间和多个内存块,所述内存块包括内 存管理信息块和应用程序数据内存块;内存管理信息块,用于记录内存分配的上下文信息,所述上下文信息包括 源代码文件名称和所在行号;应用程序数据内存块,用于存储应用程序的数据。所述内存块同时桂接在红黑树和宏定义链表上。综上所述,本专利技术实施例提供了一种内存监控管理的方法及系统,通过使 用内存池、伙伴算法、红黑树算法以及宏定义链表这几项关键技术,在很大程 度上保证了应用程序内存使用安全,提高了内存分配效率,利用内存管理信息 块跟踪记录内存分配使用信息,在发生内存非法使用时,及时记录运行时日志, 为开发人员分析定位问题提供充分依据,能够节约很大一部分开发调试时间。附图说明图1为本专利技术实施例所述内存管理模块集成的流程示意图2为本专利技术实施例所述内存池的结构示意图; 图3为本专利技术实施例所述系统的结构示意图。具体实施例方式本专利技术实施例的目的是为C语言(包括VC、 0++等)应用程序开发者提供一种高效的内存监控和管理模块,该模块可以集成到应用程序中,并对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和非法访问信息,为开发人员快速准确定位程序问题提供回溯依据。下面结合附图对本专利技术实施例所述方法进行详细说明。 首先,将内存管理^t块集成到应用程序中;具体如图l所示,图l为内存 管理模块集成到应用程序的流程示意图,具体包括以下步骤步骤101:将内存管理模块源代码添加到目标工程中。步骤102:在目标C文件中增加并include ./mem/dmal loc. h引用,引入 重载函数;具体的说就是,对C语言库最基本的内存分配、释放、复制、设置、 比较函数和字符串操作函数作宏定义重载,即用自定义的mem_alloc函数系列 对系统的malloc等内存操作函数进行封装,增加内存使用监控代码,再以封 装后的代码替换原函数的实现,从而实现函数的宏定义重载,以下简称重载函 数。<吏用自定义的mem—al loc重载mal loc的示例 #undef malloc#define malloc(size) mem_alloc ((size), —FILE—, —LINE—)通过重载函数策略,内存监控模块确保了重载前后应用程序对C语言库函数的接口调用的 一致性,同时也实现了内存管理模块的自定义功能。步骤103:在程序初始化启动时根据应用程序实际需求,创建一定大小的 内存池;步骤104:设置内存检测定时器;步骤105:设置—MEM_DEBUG——编译选项,该选项可以控制应用程序编译时 是否集成内存管理模块,编译目标工程。其中,步骤103中,创建内存池的过程具体包括采用在内存池的边界设置SAFE_MARGIN (边界保护)的方法,在内存池两 端各预留一定大小(如1M)的保护边界空间,具体应用中可以才艮据实际情况修 改保护空间的大小,确保该内存块的安全;利用伙伴算法对大内存块进行细分,每块内存块包含一个内存管理信息块 (area-t)和应用程序数据内存块(data),内存管理信息块中记录了内存分 配时的源文件、代码行、分配时间、使用标志和内存块大小的级别,为内存泄 漏检查和内存使用监控提供依据;将所述内存块同时挂接在红黑树和宏定义链表上。 上述对分配一整块内存块(系统预定义大小)进行细分后的内存池结构, 具体如图2所示。当应用程序调试启动后,定期上报所述内存泄露和/或非法访问信息给用 户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码,包括 定期上报所述内存泄露和/或非法访问信息给用户;用户对所述内存非法访问信息分析进行分析,定位内存非法访问代码行; 和/或,比较前后内存泄露信息的差异来诊断是否存在内存泄漏,定位内存泄漏 代码行。具体的说就是,在应用程序调时过程中,内存管理模块对所述内存块的状 况进行监控,并定期上报内存泄露和/或非法访问信息,将内存非法访问信息记录在内存非法访问日志文件(如dmem. log文件)中,该文件记录了内存越界 访问、访问无效指针、内存重复分配代码所在源文件、源代码行号和操作的内 存地址;将内存泄漏信息记录在内存泄露日志文件(如memleak文件)中,该 文件记录了内存分配代码所在源文件、源代码行号、4乘作的内存地址、内存分 本文档来自技高网...

【技术保护点】
一种内存监控管理的方法,其特征在于,包括:A、将内存管理模块集成到应用程序中;B、所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;C、定期上报所述内存泄露和/或非法访问信 息给用户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。

【技术特征摘要】
1、一种内存监控管理的方法,其特征在于,包括A、将内存管理模块集成到应用程序中;B、所述内存管理模块对应用程序运行时的内存分配与访问进行监控,跟踪记录内存泄漏和/或非法访问信息;C、定期上报所述内存泄露和/或非法访问信息给用户,以便于用户根据所述内存泄露和/或非法访问信息定位到相关代码。2、 如权利要求l所述的方法,其特征在于,所述步骤A具体包括Al、将内存管理模块源代码添加到目标工程中; A2、引入重载函数;A3、在程序初始化启动时根据应用程序实际需求,创建一预定大小的内存池;A4、设置内存检测定时器。3、 根据权利要求2所述的方法,其特征在于,所述步骤A还包括A5、设置—MEM—DEBUG-—编译选项,该选项可以控制应用程序编译时是否 集成内存管理模块,编译目标工程。4、 根据权利要求2或3所述的方法,其特征在于,所述步骤A3具体包括 利用边界保护方法,在内存池两端各预留预定大小的保护边界空间;利用伙伴算法将内存划分成多个内存块,所述内存块包含内存管理信息块 和应用程序数据内存块。5、 根据权利要求4所述的方法,其特征在于,所述步骤A3还包括 将所述内存块同时桂接在红黑树和宏定义链表上。6、 根据权利要求4所述的方法,其特征在于,所述内存管理信息块中记录有内存分配的上下文信息,所述上下文信息包括源代码文件...

【专利技术属性】
技术研发人员:高洪郑兴友
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

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

1