一种动态内存泄露检测方法.pdfVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种动态内存泄露检测方法.pdf

一种动态内存泄露检测方法木 许宝喜1,2王林章1,2 l软件新技术国家重点实验室,南京210093 2南京大学计算机科学与技术系,南京210093 摘 要:内存泄露问题一直是C、c++等程序员们非常关心的一个问题,借助一些工具,程序员可 以认识程序中存在的内存泄露问题。对于内存泄露检测分为静态和动态方法:静态方法一般采取分析, 验证手段对源程序进行处理,不需要执行程序;动态方法则是让程序运行,监视程序的运行,获取程 序的行为,从而分析是否有内存泄露问题。本文针对内存泄露问题,提出了一种动态检测内存泄露的 方法,这种方法在向程序员提供更加有效的诊断信息方面做了一些研究工作。在以往的很多动态内存 泄露的检测工具中,更多地关注了在程序的什么地方申请的内存发生了泄露,而对于这个泄露为何会 产生所做的工作很少。在我们的这个工作中,对源程序进行了插桩。通过动态插桩的方式,收集程序 的运行轨迹,将发生内存泄露时的内存轨迹呈现于程序员。并将该运行轨迹与在同一个地方申请了内 存,却没有发生内存泄露的轨迹进行比对,指出可能是哪一个条件判断导致了内存泄露的发生。 关键词:内存泄露动态插桩静态 l引 言 对于像C,C冉这样的编程语言来说,因为内存的使用管理完全由程序员自己控制,由此导致的缓冲区 溢出、内存泄露等问题一直困扰着C和C什程序员。内存泄露导致了很多垃圾内存(即不需要的内存,或 者无法再次引用的内存等)无法得到及时回收,用户内存的可用量被严重蚕食,系统响应变慢,严重影响 了用户的使用体验。更有甚者,内存无法及时回收导致敏感数据驻留内存的时间加长,如此内存就有可能 会被黑客利用。因此,内存泄露的检测一直是很多人研究关注的焦点。本文介绍了一种动态内存泄露检测 的方法,该方法不仅能够向程序员报告内存泄露的发生地点,而且能够提供更加有用的信息:指出可能是 由于哪一个判断导致了这个内存泄露的发生。 本文下面将分四个部分作介绍:首先介绍研究的动因,接着介绍该方法的体系结构,然后介绍了基于 该方法的一个原型实现及相关实验,最后一部分对本文的工作进行了总结。 2研究动因 假想有下面一段程序(我们称为t.c): Lineol 妙pedefs仃uct—Node{stmct』ode·next;intda诅;)Node; Line02int contajns(Node幸root,Node幸node) Line03 { Line04 i坟!node)retum0; 。作者简介:许宝喜(1982.),男,硕士研究生,主要研究领域:软件可靠性,软件测试,软件工程;王林章(1973.)男,博士,副 教授,主要研究领域:软件测试,AOP. 一种动态内存泄露检测方法 96l Line05 while(root) Line06 { Line07 if(root-data==node-data)retuml; Line08 “)0t=rOOt-neXt: Line09 } Linel0 retIJm0: Linell ) Linel2Void add—node(Node··root,Node·new.—node) Linel3 { Linel4 if(contains(牛root,ne、Ⅳ__node))retum; Linel5 new_nOde.next=·root; Linel6 ·roOt=new二node; Linel7 ) Linel8Void main(inta唱c,char幸木a唱V) Linel9 { Line20 Node·root=0: Line21 inti:

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档