C++内存检查指导手册.pdf

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C内存检查指导手册

嘉为IT 咨询服务 广东威创视讯科技股份有限公司 内存检查指导手册 目录 1. 概述 2 2. 术语 2 3. 内存检查 2 3.1. 目标 2 3.2. 要求 2 3.3. 阶段 3 4. Valgrind 3 4.1. 介绍 3 4.2. 安装 4 4.3. 使用 4 4.3.1. 命令及参数 4 4.3.2. 输出报告 5 4.3.3. 举例 7 . 未初始化内存使用 7 . 内存读写越界 8 . 内存读写重叠 10 . 内存申请释放不一致11 . 内存申请释放次数不匹配11 . 内存释放后继续进行读写 13 . 内存泄漏 14 4.4. 结论 16 5. 参考资料 16 6. 附录 17 6.1. Linux 程序内存空间布局 17 6.2. Linux 内存指标 17 6.3. Memcheck 内存检查原理 19 1 1. 概述 根据基础应用组项目开发流程规范,在项目编码和测试阶段必须对项目代码进行动态的内存检查,以 保证项目的质量。本文着重介绍内存检查的内容和内存检查工具 valgrind 的使用,指导开发人员完成内 存检查的活动。 2. 术语  Valgrind:一款用于内存调试、内存泄漏检测以及性能分析的LINUX 平台开源软件。Valgrind 这个名 字取自北欧神话中英灵殿的入口。Valgrind 支持x86、x86-64、Armv7 以及PowerPC 上的Linux,除 此之外,还有一些其它非正式支持的类Unix 平台,如FreeBSD 等。 3. 内存检查 3.1. 目标 在Linux 平台开发应用程序时,最常遇见的问题就是错误的使用内存。内存作为系统的重要资源,相 当于公司的现金流,要取之有道,用之有道。对项目代码进行动态的内存检查,是项目的质量要求。通过 一些方法和手段,跟踪程序对内存的操作和使用情况,发现错误和潜在隐患,保证程序可以正确、稳定运 行。 3.2. 要求 在项目开发中,我们遇到的错误的内存操作主要有以下几种:  使用未初始化的内存 定义的变量,未进行赋值,就拿来进行操作,这样会导致程序运行不可预期。  内存读写越界 访问了不该访问的地址空间。比如,数组越界。  内存读写重叠 C 标准库大量的内存操作函数,如 memcpy()、strcpy()等,需要由调用者保证源地址(src)和目标 地址(dst)不能发生重叠,否则,将导致读写重叠,结果不可预期。  内存泄漏 程序动态申请的内存,使用后既没有释放,也没有无法被其他程序访问。随着程序不断的运行,吞噬 的内存资源越来越多,其他进程无法获得足够的内存资源运行,最后程序被 OS 强行杀掉,甚至导致系统 瘫痪,只能强硬重启。  内存申请释放不一致 内存申请和释放的方式不一致:new()动态申请的内存,用 free()释放;malloc()申请的内存,用 delete()释放;new[ ]动态申请的数组,用delete()释放。这些都导致程序崩溃(coredump)。  内存申请释放次数不匹配 申请的内存,使用完后不释放,会导致内存泄漏。而另一种情况,申请的内存,被多个指针变量指向, 多个指针变量最后都释放了该内存块,导致一次申请的内存,被多次释放。  内存释放后继续进行读写 内存使用后,已经释放了。后续运行的代码仍然对其进行读写操作。结果不可预期。 2 以上的内存错误,都必须纠正。否则,轻则内存泄漏,占用大量的系统资源,重则程序崩溃(coredump) ,影响系统稳定性,甚至造成不可恢复的错误。 3.3. 阶段 培养良好的编程习惯,程序代码静态检查,加强单元测试,均可减少上述的内存操作失误。在项目测 试阶段,通过一些工具和方法,动态跟踪进程的内存使用情况,是必不可

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档