一种嵌入式设备及其检测和定位内存泄漏的方法.pdf

上传人:e2 文档编号:1037064 上传时间:2018-03-27 格式:PDF 页数:9 大小:399.72KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010261728.1

申请日:

2010.08.18

公开号:

CN102375776A

公开日:

2012.03.14

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 11/34申请公布日:20120314|||实质审查的生效IPC(主分类):G06F 11/34申请日:20100818|||公开

IPC分类号:

G06F11/34

主分类号:

G06F11/34

申请人:

康佳集团股份有限公司

发明人:

何银南; 蔡章盛

地址:

518053 广东省深圳市华侨城康佳集团发展中心

优先权:

专利代理机构:

深圳市万商天勤知识产权事务所(普通合伙) 44279

代理人:

顾光一

PDF下载: PDF下载
内容摘要

本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法,包括如下步骤:第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录初始内存使用情况;第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,所述实时内存使用情况中未释放的内存即为泄漏内存。本发明公开的一种嵌入式设备及其检测和定位内存泄漏的方法,不用额外增加内存开销,操作简单,方便测试人员进行代码测试和定位内存泄漏。

权利要求书

1: 一种嵌入式设备检测和定位内存泄漏的方法, 其特征在于, 包括如下步骤 : 第一步, 利用接口函数显示所有在记录的内存使用记录, 调用此函数获取并记录初始内存使用情 况; 第二步, 对所述嵌入式设备进行一系列相关操作, 再回到初始状态, 再次调用所述接口 函数获取并记录实时内存使用情况 ; 第三步, 比较所述初始内存使用情况和实时内存使用 情况, 所述实时内存使用情况中未释放的内存即为泄漏内存。
2: 如权利要求 1 所述的检测和定位内存泄漏的方法, 其特征在于, 在所述第三步中还 通过 C 语言的下述语句 : printf(″ \n% s:% s:% d\n″, __FILE__, __FUNCTI0N__, __LINE__) 来标记打印出 所述嵌入式设备的源程序中导致内存泄漏的文件名、 函数名和行号。
3: 如权利要求 1 所述的检测和定位内存泄漏的方法, 其特征在于, 在所述第三步中, 还 将比较所述初始内存使用情况和实时内存使用情况的结果, 输出到一个文件中。
4: 如权利要求 1 所述的检测和定位内存泄漏的方法, 其特征在于, 在所述第二步中, 定 义替换函数对产生内存使用的函数和释放内存使用的函数进行宏替换, 然后在所述替换函 数中获取并记录内存使用情况。
5: 一种嵌入式设备, 使用如权利要求 1 至 4 所述的方法, 包括控制模块, 电源模块, 和一 个以上的子功能模块 ; 其特征在于, 还包括内存泄漏的检测和定位模块 ; 所述内存泄漏的 检测和定位模块进一步包括 : 内存使用情况函数的创建模块, 用于创建内存使用情况函数 ; 子模块进入之前内存使用情况的获取模块, 用于在调用所述子功能模块之前获取内存 使用情况 ; 子模块进入之后再退出的情况下内存使用情况的获取模块, 用于在调用过所述功能子 模块后获取内存使用情况 ; 两者的比较模块, 用于比较调用所述功能子模块之前和之后的内存的使用情况 ; 比较结果重定向给输出模块, 用于将所述两者的比较模块获得的内存使用情况重定向 输出到指定文件里 ; 根据输出显示内存泄漏所在文件行号模块, 用于根据所述的重定向输出文件显示内存 泄漏的具体文件名。
6: 如权利要求 5 所述的嵌入式设备, 其特征在于, 所述的一个以上的子功能模块包括 : 下载、 多媒体、 我的应用、 视频聊天、 在线视频、 在线教育、 资讯和网络设置。

说明书


一种嵌入式设备及其检测和定位内存泄漏的方法

    技术领域 本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法。
     背景技术 在计算机科学中, 内存泄漏是指由于疏忽或错误造成的程序未能及 时释放已经不再使用的内存的情况。所以内存泄漏并非指内存在物理上的消失, 而是应用 程序分配某段内存后, 由于设计错误, 失去了对该段内存的控制, 因而造成了内存的浪费, 这块内存就不能被再次使用, 我们就说这块内存泄漏了。
     现有技术中的检测内存泄漏的方法, 是通过建立动态存储内存块信息的链表, 并 设定同一申请位置长生存时间内存块数量阈值 ; 遍历链表, 检查各链表元素存储的内存块 信息得到各内存块的生存时间, 将各长生存时间内存块根据所述各长生存时间内存块被申 请的位置分类, 若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请 位置长生存时间内存块数量阈值, 则认为所述各长生存时间内存块发生了内存泄漏。这种 检测和定位内存泄漏的方法需要增加内存开销, 而且操作复杂, 不利于测试人员进行代码 测试和定位内存泄漏。
     发明内容 本发明的主要目的在于提出一种嵌入式设备及其检测和定位内存 泄漏的方法, 方便测试人员进行代码测试和定位内存泄漏。
     本发明公开了一种嵌入式设备检测和定位内存泄漏的方法, 包括如下步骤 : 第一 步, 利用接口函数显示所有在记录的内存使用记录, 调用此函数获取并记录初始内存使用 情况 ; 第二步, 对所述嵌入式设备进行一系列相关操作, 再回到初始状态, 再次调用所述接 口函数获取并记录实时内存使用情况 ; 第三步, 比较所述初始内存使用情况和实时内存使 用情况, 所述实时内存使用情况中未释放的内存即为泄漏内存。
     本发明公开的检测和定位内存泄漏的方法, 在所述第三步中还通过 C 语言的下述 语句 :
     printf(″ \n% s:% s:% d\n″, __FILE__, __FUNCTION__, __LINE__)
     来标记打印出所述嵌入式设备的源程序中导致内存泄漏的文件名、 函数名和行 号。
     在所述第三步中, 还将比较所述初始内存使用情况和实时内存使用情况的结果, 输出到一个文件中。
     在所述第二步中, 定义替换函数对产生内存使用的函数和释放内存使用的函数进 行宏替换, 然后在所述替换函数中获取并记录内存使用情况。
     本发明还公开了一种嵌入式设备, 使用前述的检测和定位内存泄漏的方法, 包括 控制模块, 电源模块, 和一个以上的子功能模块 ; 还包括内存泄漏的检测和定位模块 ; 所述 内存泄漏的检测和定位模块进一步包括 :
     内存使用情况函数的创建模块, 用于创建内存使用情况函数 ;
     子模块进入之前内存使用情况的获取模块, 用于在调用所述子功能模块之前获取 内存使用情况 ;
     子模块进入之后再退出的情况下内存使用情况的获取模块, 用于在调用过所述功 能子模块后获取内存使用情况 ;
     两者的比较模块, 用于比较调用所述功能子模块之前和之后的内存的使用情况 ;
     比较结果重定向给输出模块, 用于将所述两者的比较模块获得的内存使用情况重 定向输出到指定文件里 ;
     根据输出显示内存泄漏所在文件行号模块, 用于根据所述的重定向输出文件显示 内存泄漏的具体文件名。
     本发明公开的嵌入式设备, 所述的一个以上的子功能模块包括 : 下载、 多媒体、 我 的应用、 视频聊天、 在线视频、 在线教育、 资讯和网络设置。
     本发明公开的一种嵌入式设备及其检测内存泄漏的方法, 不用额外增加内存开 销, 操作简单, 方便测试人员进行代码测试和定位内存泄漏。 附图说明
     图 1 为本发明的嵌入式设备检测和定位内存泄露情况的功能模块示意图。
     图 2 为本发明的嵌入式设备检测和定位内存泄露情况的方法流程图。
     具体实施方式 下面结合附图和具体实施方式对本发明作进一步详细说明。
     本发明提出了一种检测和定位内存泄漏的方法, 如图 1 所示为本发明的检测和定 位内存泄露情况的功能模块示意图。技术方案由六个模块组成 : 内存使用情况函数的创建 模块 101、 子模块进入之前内存使用情况的获取模块 102、 子模块进入之后再退出的情况下 内存使用情况的获取模块 103、 两者的比较模块 104、 比较结果重定向给输出模块 105、 根据 输出显示内存泄漏所在文件行号模块 106。 所述的内存使用情况函数的创建模块 101 指的是创建内存使用情况函数 ; 所述的 子模块进入之前内存使用情况的获取模块 102 指的是在子模块进入功能之前获取内存使 用情况 ; 所述的子模块进入之后再退出内存使用情况的获取模块 103 指的是从进入子模块 后退出所述子模块获取此时内存使用情况 ; 所述的两者的比较模块 104 指的是比较进入子 模块功能之前和进入之后退出所述子模块功能之后内存的使用情况 ; 所述的比较结果重定 向给输出模块 105 指的是将进入子模块功能之前和进入之后退出所述子模块功能之后内 存的使用情况比较结果重定向输出到指定文件里 ; 所述的根据输出显示内存泄漏所在文件 行号模块 106 指的是根据所述的重定向输出文件显示内存泄漏的具体哪个文件的哪行没 有释放内存。
     一般嵌入式设备不仅包括电源模块、 控制模块等硬件部分, 在软件上还分为若干 个子功能模块, 例如网络电视的子功能模块有下载、 多媒体、 我的应用、 视频聊天、 在线视 频、 在线教育、 资讯、 网络设置等, 如果需要判断下载子功能模块代码部分是否有内存泄漏 的情况, 可以在进入下载子功能模块之前获取一次内存使用情况, 然后进入下载子功能模 块进行若干次操作, 例如进行电视剧下载、 电影下载、 我的下载、 影视搜索等之后再退出, 然 后再获取一次内存使用情况, 比较两者的差别, 且将差别输出到一个文件例如 memoryuse. txt 文件里, 屏幕打印出对比结果, 显示具体哪一个文件的具体哪一个行号分配的内存没有 释放, 导致内存泄漏。
     在现有技术中是通过检查特定内存块的信息来得到内存块的生存时间, 本发明是 对产生内存使用的函数和释放内存使用的函数进行宏替换, 用自己的函数替换 malloc 等 产生内存使用的函数和 free 等产生释放内存的函数。在自己的函数中对内存使用情况作
     记录, 从而 “获取内存使用情况” 来获取内存的使用和释放, 判断内存是否泄漏。
     如图 2 所示为本发明的检测和定位内存泄露情况的方法流程图, 在检测和定位内 存泄漏功能模块中, 首先获取进入子模块之前的内存使用情况, 然后再获取进入子模块之 后再退出的内存使用情况, 然后比较前述两种内存使用情况, 判断两者是否有差别, 如果有 差别则分别打印前后内存使用情况, 再比较前后内存使用情况, 并且将比较结果重新定向 到一个文件里, 退出即可。如果没有差别, 则直接退出。
     在图 2 中, “分别打印前后内存使用情况” , 是在串口输出终端上用 printf 打印出 来的信息, 不是人工比较前后内存使用情况, 是控制中心自动对代码进行比较, 并且将比较 结果显示出来, 所谓重定向就是不想让打印输出的东西在终端上显示, 而是输出到一个指 定的文件里, 例如文本文件里。
     以下为本发明的 C 语言程序源代码 :
     #define FILENAME 260
     /*************************************************************/
     /* 结构定义 */
     /************************************************************/
     typedef struct
     {
     void*pMem ;
     int iSize ;
     char szFile[FILENAME_MAX] ;
     int iLine ;
     }MEM_USE_T ;
     typedef std::mapstl_mapMemUse ;
     typedef stl_mapMemUse::iterator stl_mapMemUseIter ;
     /************************************************************/
     /* 本地变量 */
     /************************************************************/
     static stl_mapMemUse lc_mapMemUse ;
     /*
     // 功能 :
     // 内存分配调试初始化
     // 参数 :
     // 无
     // 返回值 :
     // 无
     */
     void KKMEM_Init(void)
     {
     lc_mapMemUse.clear() ;} /* // 功能 : // 记录内存分配信息 // 参数 : //iSize分配的大小 //pszFileName- 调用此函数的文件名 //iLine调用此函数的行号 // 返回值 : // 分配的内存地址 */ void*KKMEM_Malloc(size_t iSize, const char*pszFileName, int iLine) { MEM_USE_T stMemUse ; strncpy(stMemUse.szFile, pszFileName, FILENAME_MAX) ; stMemUse.szFile[FILENAME_MAX-1] = 0 ; stMemUse.iLine = iLine ; stMemUse.iSize = iSize ; stMemUse.pMem = malloc(iSize) ; lc_mapMemUse[stMemUse.pMem] = stMemUse ; return stMemUse.pMem ; } /* // 功能 : // 释放分配的内存 // 参数 : //pMem分配的内存地址 //pszFileName- 调用此函数的文件名 //iLine调用此函数的行号 // 返回值 : // 无 */ void KKMEM_Free(void*pMem, const char*pszFileName, int iLine) { stl_mapMemUseIter iter ; if((iter = lc_mapMemUse.find(pMem)) == lc_mapMemUse.end()) { const char*pszShortName = strrchr(pszFileName, ’ /’ ); if(pszShortName == NULL)6102375776 A CN 102375783
     说{明书5/5 页pszShortName = strrchr(pszFileName, ’ \\’ ); } if(pszShortName == NULL) { pszShortName = pszFileName ; } else { ++pszShortName ; } fprintf(stderr,″ *********ERROR !, free pMem =% p not inrecords !
     pos =% s:% d*****\n″, pMem, pszShortName, iLine) ;
     free(pMem) ;
     } else { free(pMem) ; lc_mapMemUse.erase(pMem) ; }}
     在上述源代码中, 有 3 个功能模块 : 1. 内存分配调试初始化 ; 2. 记录内存分配信 息; 3. 释放分配的内存。本发明提供的接口函数显示所有在记录的内存使用记录, 调用此 函数获取内存使用情况, 进行一系列操作后再回到初始状态, 再次调用此函数获取内存使 用情况, 二者对比即可发现分配后未释放的内存, 以及产生这些内存使用的文件和行号。 在 哪里分配内存的, 可以通过下述语句 :
     printf(″ \n% s:% s:% d\n″, __FILE__, __FUNCTION__, __LINE__) 来标记打 印出文件名、 函数名和行号。
     以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内所作的任何修改、 等同替换和改进等, 均应包含在本发明的保护范围之内。

一种嵌入式设备及其检测和定位内存泄漏的方法.pdf_第1页
第1页 / 共9页
一种嵌入式设备及其检测和定位内存泄漏的方法.pdf_第2页
第2页 / 共9页
一种嵌入式设备及其检测和定位内存泄漏的方法.pdf_第3页
第3页 / 共9页
点击查看更多>>
资源描述

《一种嵌入式设备及其检测和定位内存泄漏的方法.pdf》由会员分享,可在线阅读,更多相关《一种嵌入式设备及其检测和定位内存泄漏的方法.pdf(9页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102375776A43申请公布日20120314CN102375776ACN102375776A21申请号201010261728122申请日20100818G06F11/3420060171申请人康佳集团股份有限公司地址518053广东省深圳市华侨城康佳集团发展中心72发明人何银南蔡章盛74专利代理机构深圳市万商天勤知识产权事务所普通合伙44279代理人顾光一54发明名称一种嵌入式设备及其检测和定位内存泄漏的方法57摘要本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录初始内存使用情况;。

2、第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,所述实时内存使用情况中未释放的内存即为泄漏内存。本发明公开的一种嵌入式设备及其检测和定位内存泄漏的方法,不用额外增加内存开销,操作简单,方便测试人员进行代码测试和定位内存泄漏。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书5页附图2页CN102375783A1/1页21一种嵌入式设备检测和定位内存泄漏的方法,其特征在于,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录。

3、初始内存使用情况;第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,所述实时内存使用情况中未释放的内存即为泄漏内存。2如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第三步中还通过C语言的下述语句PRINTFNSSDN,_FILE_,_FUNCTI0N_,_LINE_来标记打印出所述嵌入式设备的源程序中导致内存泄漏的文件名、函数名和行号。3如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第三步中,还将比较所述初始内存使用情况和实时内存使用情况的结果,输出到一。

4、个文件中。4如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第二步中,定义替换函数对产生内存使用的函数和释放内存使用的函数进行宏替换,然后在所述替换函数中获取并记录内存使用情况。5一种嵌入式设备,使用如权利要求1至4所述的方法,包括控制模块,电源模块,和一个以上的子功能模块;其特征在于,还包括内存泄漏的检测和定位模块;所述内存泄漏的检测和定位模块进一步包括内存使用情况函数的创建模块,用于创建内存使用情况函数;子模块进入之前内存使用情况的获取模块,用于在调用所述子功能模块之前获取内存使用情况;子模块进入之后再退出的情况下内存使用情况的获取模块,用于在调用过所述功能子模块后获取内存使。

5、用情况;两者的比较模块,用于比较调用所述功能子模块之前和之后的内存的使用情况;比较结果重定向给输出模块,用于将所述两者的比较模块获得的内存使用情况重定向输出到指定文件里;根据输出显示内存泄漏所在文件行号模块,用于根据所述的重定向输出文件显示内存泄漏的具体文件名。6如权利要求5所述的嵌入式设备,其特征在于,所述的一个以上的子功能模块包括下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯和网络设置。权利要求书CN102375776ACN102375783A1/5页3一种嵌入式设备及其检测和定位内存泄漏的方法0001技术领域本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法。0002背景技。

6、术在计算机科学中,内存泄漏是指由于疏忽或错误造成的程序未能及时释放已经不再使用的内存的情况。所以内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费,这块内存就不能被再次使用,我们就说这块内存泄漏了。0003现有技术中的检测内存泄漏的方法,是通过建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;遍历链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块。

7、数量阈值,则认为所述各长生存时间内存块发生了内存泄漏。这种检测和定位内存泄漏的方法需要增加内存开销,而且操作复杂,不利于测试人员进行代码测试和定位内存泄漏。0004发明内容本发明的主要目的在于提出一种嵌入式设备及其检测和定位内存泄漏的方法,方便测试人员进行代码测试和定位内存泄漏。0005本发明公开了一种嵌入式设备检测和定位内存泄漏的方法,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录初始内存使用情况;第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,。

8、所述实时内存使用情况中未释放的内存即为泄漏内存。0006本发明公开的检测和定位内存泄漏的方法,在所述第三步中还通过C语言的下述语句0007PRINTFNSSDN,_FILE_,_FUNCTION_,_LINE_0008来标记打印出所述嵌入式设备的源程序中导致内存泄漏的文件名、函数名和行号。0009在所述第三步中,还将比较所述初始内存使用情况和实时内存使用情况的结果,输出到一个文件中。0010在所述第二步中,定义替换函数对产生内存使用的函数和释放内存使用的函数进行宏替换,然后在所述替换函数中获取并记录内存使用情况。0011本发明还公开了一种嵌入式设备,使用前述的检测和定位内存泄漏的方法,包括控制。

9、模块,电源模块,和一个以上的子功能模块;还包括内存泄漏的检测和定位模块;所述内存泄漏的检测和定位模块进一步包括0012内存使用情况函数的创建模块,用于创建内存使用情况函数;0013子模块进入之前内存使用情况的获取模块,用于在调用所述子功能模块之前获取内存使用情况;0014子模块进入之后再退出的情况下内存使用情况的获取模块,用于在调用过所述功能子模块后获取内存使用情况;说明书CN102375776ACN102375783A2/5页40015两者的比较模块,用于比较调用所述功能子模块之前和之后的内存的使用情况;0016比较结果重定向给输出模块,用于将所述两者的比较模块获得的内存使用情况重定向输出到。

10、指定文件里;0017根据输出显示内存泄漏所在文件行号模块,用于根据所述的重定向输出文件显示内存泄漏的具体文件名。0018本发明公开的嵌入式设备,所述的一个以上的子功能模块包括下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯和网络设置。0019本发明公开的一种嵌入式设备及其检测内存泄漏的方法,不用额外增加内存开销,操作简单,方便测试人员进行代码测试和定位内存泄漏。附图说明0020图1为本发明的嵌入式设备检测和定位内存泄露情况的功能模块示意图。0021图2为本发明的嵌入式设备检测和定位内存泄露情况的方法流程图。0022具体实施方式下面结合附图和具体实施方式对本发明作进一步详细说明。002。

11、3本发明提出了一种检测和定位内存泄漏的方法,如图1所示为本发明的检测和定位内存泄露情况的功能模块示意图。技术方案由六个模块组成内存使用情况函数的创建模块101、子模块进入之前内存使用情况的获取模块102、子模块进入之后再退出的情况下内存使用情况的获取模块103、两者的比较模块104、比较结果重定向给输出模块105、根据输出显示内存泄漏所在文件行号模块106。0024所述的内存使用情况函数的创建模块101指的是创建内存使用情况函数;所述的子模块进入之前内存使用情况的获取模块102指的是在子模块进入功能之前获取内存使用情况;所述的子模块进入之后再退出内存使用情况的获取模块103指的是从进入子模块后。

12、退出所述子模块获取此时内存使用情况;所述的两者的比较模块104指的是比较进入子模块功能之前和进入之后退出所述子模块功能之后内存的使用情况;所述的比较结果重定向给输出模块105指的是将进入子模块功能之前和进入之后退出所述子模块功能之后内存的使用情况比较结果重定向输出到指定文件里;所述的根据输出显示内存泄漏所在文件行号模块106指的是根据所述的重定向输出文件显示内存泄漏的具体哪个文件的哪行没有释放内存。0025一般嵌入式设备不仅包括电源模块、控制模块等硬件部分,在软件上还分为若干个子功能模块,例如网络电视的子功能模块有下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯、网络设置等,如果需要。

13、判断下载子功能模块代码部分是否有内存泄漏的情况,可以在进入下载子功能模块之前获取一次内存使用情况,然后进入下载子功能模块进行若干次操作,例如进行电视剧下载、电影下载、我的下载、影视搜索等之后再退出,然后再获取一次内存使用情况,比较两者的差别,且将差别输出到一个文件例如MEMORYUSETXT文件里,屏幕打印出对比结果,显示具体哪一个文件的具体哪一个行号分配的内存没有释放,导致内存泄漏。0026在现有技术中是通过检查特定内存块的信息来得到内存块的生存时间,本发明是对产生内存使用的函数和释放内存使用的函数进行宏替换,用自己的函数替换MALLOC等产生内存使用的函数和FREE等产生释放内存的函数。在。

14、自己的函数中对内存使用情况作说明书CN102375776ACN102375783A3/5页5记录,从而“获取内存使用情况”来获取内存的使用和释放,判断内存是否泄漏。0027如图2所示为本发明的检测和定位内存泄露情况的方法流程图,在检测和定位内存泄漏功能模块中,首先获取进入子模块之前的内存使用情况,然后再获取进入子模块之后再退出的内存使用情况,然后比较前述两种内存使用情况,判断两者是否有差别,如果有差别则分别打印前后内存使用情况,再比较前后内存使用情况,并且将比较结果重新定向到一个文件里,退出即可。如果没有差别,则直接退出。0028在图2中,“分别打印前后内存使用情况”,是在串口输出终端上用PR。

15、INTF打印出来的信息,不是人工比较前后内存使用情况,是控制中心自动对代码进行比较,并且将比较结果显示出来,所谓重定向就是不想让打印输出的东西在终端上显示,而是输出到一个指定的文件里,例如文本文件里。0029以下为本发明的C语言程序源代码0030DEFINEFILENAME2600031/0032/结构定义/0033/0034TYPEDEFSTRUCT00350036VOIDPMEM;0037INTISIZE;0038CHARSZFILEFILENAME_MAX;0039INTILINE;0040MEM_USE_T;0041TYPEDEFSTDMAPSTL_MAPMEMUSE;0042TYPE。

16、DEFSTL_MAPMEMUSEITERATORSTL_MAPMEMUSEITER;0043/0044/本地变量/0045/0046STATICSTL_MAPMEMUSELC_MAPMEMUSE;0047/0048/功能0049/内存分配调试初始化0050/参数0051/无0052/返回值0053/无0054/0055VOIDKKMEM_INITVOID00560057LC_MAPMEMUSECLEAR;说明书CN102375776ACN102375783A4/5页600580059/0060/功能0061/记录内存分配信息0062/参数0063/ISIZE分配的大小0064/PSZFILEN。

17、AME调用此函数的文件名0065/ILINE调用此函数的行号0066/返回值0067/分配的内存地址0068/0069VOIDKKMEM_MALLOCSIZE_TISIZE,CONSTCHARPSZFILENAME,INTILINE00700071MEM_USE_TSTMEMUSE;0072STRNCPYSTMEMUSESZFILE,PSZFILENAME,FILENAME_MAX;0073STMEMUSESZFILEFILENAME_MAX10;0074STMEMUSEILINEILINE;0075STMEMUSEISIZEISIZE;0076STMEMUSEPMEMMALLOCISIZE;。

18、0077LC_MAPMEMUSESTMEMUSEPMEMSTMEMUSE;0078RETURNSTMEMUSEPMEM;00790080/0081/功能0082/释放分配的内存0083/参数0084/PMEM分配的内存地址0085/PSZFILENAME调用此函数的文件名0086/ILINE调用此函数的行号0087/返回值0088/无0089/0090VOIDKKMEM_FREEVOIDPMEM,CONSTCHARPSZFILENAME,INTILINE00910092STL_MAPMEMUSEITERITER;0093IFITERLC_MAPMEMUSEFINDPMEMLC_MAPMEMUS。

19、EEND00940095CONSTCHARPSZSHORTNAMESTRRCHRPSZFILENAME,/;0096IFPSZSHORTNAMENULL说明书CN102375776ACN102375783A5/5页700970098PSZSHORTNAMESTRRCHRPSZFILENAME,;00990100IFPSZSHORTNAMENULL01010102PSZSHORTNAMEPSZFILENAME;01030104ELSE01050106PSZSHORTNAME;01070108FPRINTFSTDERR,ERROR,FREEPMEMPNOTINRECORDS0109POSSDN,P。

20、MEM,PSZSHORTNAME,ILINE;0110FREEPMEM;01110112ELSE01130114FREEPMEM;0115LC_MAPMEMUSEERASEPMEM;011601170118在上述源代码中,有3个功能模块1内存分配调试初始化;2记录内存分配信息;3释放分配的内存。本发明提供的接口函数显示所有在记录的内存使用记录,调用此函数获取内存使用情况,进行一系列操作后再回到初始状态,再次调用此函数获取内存使用情况,二者对比即可发现分配后未释放的内存,以及产生这些内存使用的文件和行号。在哪里分配内存的,可以通过下述语句0119PRINTFNSSDN,_FILE_,_FUNCTION_,_LINE_来标记打印出文件名、函数名和行号。0120以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。说明书CN102375776ACN102375783A1/2页8图1说明书附图CN102375776ACN102375783A2/2页9图2说明书附图CN102375776A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1