C语言内存泄漏.docxVIP

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

什么是内存泄漏?指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存管理重要性:内存有关的问题可以分成两类:内存访问错误和内存使用错误。内存访问错误包括错误地读取内存和错误地写内存。错误地读取内存可能让你的模块返回意想不到的结果,从而导致后续的模块运行异常。错误地写内存可能导致系统崩溃。内存使用方面的错误主要是指申请的内存没有正确释放,从而使程序运行逐渐减慢,直至停止。这方面的错误由于表现比较慢很难被人工察觉。程序也许运行了很久才会耗净资源,发生问题。如何发现内存泄漏?不同的系统都带有内存监视工具,我们可以从监视工具收集一段时间内的堆栈内存信息,观测增长趋势,来确定是否有内存泄漏。在 Linux 平台可以用 ps 命令(ps -aux)或者用top动态监视内存的使用。内存泄漏分析措施:定义:静态程序分析是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析”。静态分析:包括手动检测和静态工具分析,这是代价最小的调试方法。手动检测主要依靠良好的编码规范和人工检测;代码静态扫描和分析的工具比较多,比如 splint, PC-LINT($389), BEAM等。缺点:对标准纯C语言源代码具有很好的支持优点:无需编译,可以直接对源码进行分析,源代码可以是部分代码不需要是完整的代码。动态实时检测:实时检测工具主要有 valgrind, Rational purify 等。Valgrind: 可以检查出下列几种内存操作上的错误:读写已经释放的内存、读写内存块越界(从前或者从后)、使用还未初始化的变量、将无意义的参数传递给系统调用以及内存泄漏。Rational purify:主要针对软件开发过程中难于发现的内存错误、运行时错误。在软件开发过程中自动地发现错误,准确地定位错误,提供完备的错误信息,从而减少了调试时间。内存检测工具分析:静态内存检测(splint):$splint +bounds bb.c检查控制splint提供了三种方式可进行检查的控制,分别是.splintrc配置文件、flags标志和格式化注释。flags:splint支持几百个标志用来控制检查和消息报告,使用时标志前加’+‘或’-’,+标志开启这个标志,-表示关闭此标志,下面例子展示了flags标志的用法:splint -showcola.c//在检测a.c时,告警消息中列数不被打印splint -varusea.c//在检测a.c时,告警消息中未使用变量告警不被打印.splintrc配置文件:在使用源码安装splint之后,.splintrc文件将被安装在主目录下,.splintrc文件中对一些标志作了默认的设定,命令行中指定的flags标志会覆盖.splintrc文件中的标志。格式化注释:格式化注释提供一个类型、变量或函数的格外的信息,可以控制标志设置,增加检查效果,所有格式化注释都以/*@开始,@*/结束,比如在函数参数前加/*@null@*/,表示该参数可能是NULL,做检测时,splint会加强对该参数的值的检测。动态内存检测(valgrind):$gcc–g –o bb bb.c使用选项-g编译程序,-g参数可以包含进调试信息$valgrind--tool=memcheck--leak-check=full ./bb 2 report.valgrind用法: valgrind [options] prog-and-args [options]: 常用选项–tool=[default: memcheck]–tool=memcheck:要求用 memcheck这个工具对程序进行分析一?Valgrind工具集简绍Valgrind包含下列工具:????1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。????2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。????3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。????4、helgrind:用于检查多线程程序的竞态条件。????5、massif:堆栈分析器,指示程序中使用了多少堆内存等信息。????6、lackey:? ? 7、nulgrind:这几个工具的使用是通过命令:valgrand --tool=name 程序名来分别调用的,当不指定tool参数时默认是?--tool=memcheck–log-file=filename将输出的信息写入到filena

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档