- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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. 阶段
培养良好的编程习惯,程序代码静态检查,加强单元测试,均可减少上述的内存操作失误。在项目测
试阶段,通过一些工具和方法,动态跟踪进程的内存使用情况,是必不可
您可能关注的文档
- BCS100 独立式电容调高器用户手册V3.13.pdf
- BD Accuri C6 手册.pdf
- BackTrack5中文指南V9纯净打印版.pdf
- BC-W02C说明书.pdf
- BEDFORD 百德福B600S手册.pdf
- Bentley AutoPipe 初级培训.pdf
- Beamer- LaTeX入门(刘海洋)_.pdf
- Bernese软件简介.pdf
- BEST 800kw水套炉说明书.pdf
- bezier曲线曲面图片版.pdf
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)