[发明专利]一种嵌入式系统内存泄露的检测方法有效
申请号: | 200910256476.0 | 申请日: | 2009-12-29 |
公开(公告)号: | CN101763305A | 公开(公告)日: | 2010-06-30 |
发明(设计)人: | 田友强 | 申请(专利权)人: | 青岛海信宽带多媒体技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 青岛联智专利商标事务所有限公司 37101 | 代理人: | 李升娟 |
地址: | 266100 山*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 嵌入式 系统 内存 泄露 检测 方法 | ||
技术领域
本发明涉及一种内存处理方法,具体地说,是涉及一种对嵌入式系统内存 泄露进行检测的方法,属于嵌入式系统技术领域。
背景技术
对于内存泄露,一般是指堆内存的泄露。堆内存,是指应用程序在运行过 程中,利用一些特定的函数从堆中分配的、而在使用完毕后再通过特定的函数 予以释放的内存。如果应用程序在使用完堆内存后没有将其释放,则这块内存 就不能被再次使用,就认为这块内存泄露了。
根据其发生的方式来分,内存泄露可以分为下述4类:
(1)常发性内存泄露:发生内存泄露的函数代码会被多次执行到,每次被 执行的时候都会导致一块内存泄露。
(2)偶发性内存泄露:发生内存泄露的函数代码只有在某些特定环境或操 作过程下才会发生。
常发性和偶发性是相对的,对于特定的环境,偶发性也许就会变成常发性。
(3)一次性内存泄露:发生内存泄露的函数代码只会被执行一次;或者由 于算法上的缺陷,导致总会有一块且仅有一块内存发生泄露。比如,在类的构 造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄露只会发生 一次。
(4)隐式内存泄露:程序在运行过程中不停地分配内存,但是直到结束的 时候才释放内存。严格地说,此时并没有发生内存泄露,因为最终程序释放了 所有申请的内存。但是对于一个服务器程序来说,需要运行几天、几周甚至几 个月,若不及时释放内存,也可能导致最终耗尽系统的所有内存,因此,对于 这类内存泄露,称之为隐式内存泄露。
内存泄露时,将会导致内存空间的浪费。一个小的内存泄露可能不需要太 注意,但是若程序泄露大块内存,或者渐增式的泄露内存会引起下述现象:先 是系统性能降低,然后引起复杂的内存耗尽错误;最坏的情况是,一个内存泄 露程序可能用完了非常多的内存而引起其他程序出错,而用户不能知道错误到 底来自哪里。另外,一个看上去危害不大的内存泄露,可能是另一个问题的先 兆。因此,要尽量避免内存泄露现象的发生。
要避免内存泄露,除了要求编程人员具有良好的编码习惯和编码规范之外, 关键还要从程序代码上入手,对内存泄露进行高效、可靠的检测。目前常用的 内存泄露检测方法是:为内存分配函数和内存释放函数提供debug版本,跟踪 内存的分配和释放;程序调试人员手动调用或者在程序结束时自动调用内存泄 露信息显示函数,根据跟踪结果显示内存地址、内存块的大小及内存中的内容 等信息。但是,这种传统的内存泄露检测方法在嵌入式系统中使用时存在下述 缺陷:
第一,嵌入式系统中的软件一般是启动后一直在运行,通过断电方式结束 程序的运行,因此,无法预知程序何时结束,也就无法执行相应的内存泄露检 测程序。
第二,嵌入式系统中内存的分配和释放,不一定是在同一个文件中,也不 一定是在同一个模块中,也可能分配后永远不释放,这依赖于设计时的逻辑, 而内存泄露检测模块无法知晓。因此,内存检测时无法提供准确的内存泄露信 息,可能会发生内存泄露误报的问题。
第三,在嵌入式系统中无法检测内存误释放的问题,由于指针使用错误, 有可能会在不应该释放内存的地方进行了释放,从而可能导致程序运行错误或 者崩溃。
发明内容
本发明针对现有技术中的内存泄露检测方法在嵌入式系统软件开发过程中 存在的配置不灵活、使用不方便、容易发生内存泄露误报和误释放的问题,提 供了一种内存泄露的检测方法,利用该方法,可实现对嵌入式系统内存泄露的 分区检测,方法使用灵活、检测效率较高。
为解决上述技术问题,本发明采用以下技术方案予以实现:
一种嵌入式系统内存泄露的检测方法,包括跟踪内存分配的过程和跟踪内 存释放的过程的步骤,以及根据跟踪结果进行内存泄露检测的步骤;
所述内存分配的过程包括通过内存分配函数的参数获取该内存分配函数分 配的内存所对应的内存释放范围类型信息及内存释放位置信息并进行保存的步 骤以及下述步骤:
通过内存分配函数的参数获取并保存内存分配函数所在的文件名、代码行 号及函数名信息;
查找与所述文件名和代码行号相对应的最大内存分配编号,将所述最大内 存分配编号加1,作为当前分配的内存的内存分配编号;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于青岛海信宽带多媒体技术有限公司,未经青岛海信宽带多媒体技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910256476.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:按钮装置及电子装置
- 下一篇:用于锁相环的软基准切换