[发明专利]一种面向堆操作程序的内存泄漏检测方法有效
申请号: | 201210041025.7 | 申请日: | 2012-02-22 |
公开(公告)号: | CN102662825A | 公开(公告)日: | 2012-09-12 |
发明(设计)人: | 王戟;董龙明;陈立前;董威;刘万伟;李仁见 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 国防科技大学专利服务中心 43202 | 代理人: | 郭敏 |
地址: | 410073 湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 操作 程序 内存 泄漏 检测 方法 | ||
技术领域
本发明涉及计算机程序中一类具有动态、易变共享内存操作特性的堆操作程序内存泄漏的静态检测方法。
背景技术
堆操作程序包括使用动态数据结构(如:链表、树等)存储和处理数据的程序,在系统软件和应用软件非常常见,比如:操作系统(如:Linux、FreeRTOS)常常使用优先级队列或哈希表管理系统的任务;设备驱动管理程序使用共享单向或双向链表管理各种设备;服务器软件(如:Apache)使用容器(Collection)接受和存储各种用户请求;信息系统管理软件使用各类容器表示视图和存储从数据库中查询得到的数据。这类程序都具有运行过程中动态分配、聚合、分离或释放堆中内存单元的特点;另一方面,分析这类程序源代码时可知,程序员使用指针变量(或指针域)直接(或间接)操纵这些内存单元,使得这些动态内存单元间存在着复杂的指向关系,比如:某个内存单元可能被多个指针变量或其它内存单元所指向。因此,判断堆操作程序中已申请的内存单元是否最终被释放比其他类型的程序困难和复杂得多。内存泄漏是指动态分配的内存没有即时被释放,它是一类重要的软件错误,它能够导致持续运行的系统由于内存资源耗尽而崩溃,或者重要的信息泄漏。
当前,内存泄漏检测有多种方法及其工具,主要分为动态和静态的方法。典型动态方法的工具有Purify、JPF等,这类方法虽能准确地定位错误,自动化程度高,但受限于输入用例,不能检查所有的内存泄漏错误;静态方法是在不运行软件前提下检查是否存在内存泄漏,典型工作有:LCLint、SATURN等,可以找到所有可能的内存泄漏错误,但是存在较高的误报率。因此,如何在保证精度的前提下使得静态检测工具能够检测大规模程序是当前静态检测研究的热点和难点。针对动态、易变分配内存的堆操作程序中内存泄漏检测的方法主要可以分为:
(1)域不敏感检测方法
域不敏感检测方法是基于指针别名分析检测程序中每个分配的内存结点是否最终被释放,又可以分为流敏感和流不敏感、路径敏感和路径不敏感、上下文敏感和上下文不 敏感6种检测方法。例如:Zongxing Xu等人在2008年软件质量国际会议(QSIC′08)上提出了基于约束求解器CVC3路径敏感的过程间内存泄漏算法;Yungbum Jung和Kwangkeun Yi在国际内存管理论坛会议(ISMM’08)上提出了一种自动化的静态分析工具SPARROW,设计了基于逃逸模型的参数化过程函数摘要方法;除此之外,Xie Yichen和Alex Aiken在第10届欧洲软件工程会议上提出了内存泄漏检测工具Saturn,将内存泄漏问题规约为布尔公式的可满足性问题,然后使用SAT求解器判断是否存在内存泄漏;David L.Heine等人在第28届软件工程国际会议上提出了内存泄漏检测工具Clouseau,它是基于指针所有权描述释放堆内存结点的指针变量,然后构造所有权约束系统检测内存泄漏错误。所有这些工具不能直接应用于检测堆操作程序中内存泄漏错误。
(2)域敏感检测方法
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210041025.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:利用空间混合索引机制检测钓鱼网页的方法
- 下一篇:一种开口手套