找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4399|回复: 2

说说我对内存泄漏的认识:

[复制链接]
发表于 2008-1-15 21:58:36 | 显示全部楼层 |阅读模式
    内存泄漏,对C++程序员来说,一定要非常重视,特别是设计、开发服务器类应用程序的人员。
    内存泄漏这个概念我就不深入阐述了,简单的说,无非就是只消耗资源,而不释放,创建了,没有在适当的时候删除。带来的问题就是,程序在运行过程中,占用的内存越来越大,能从任务管理器中发现的,最后因为消耗太多的系统资源,而崩溃。
    现在的软件越来越复杂,功能越来越强大,业务逻辑千变万化,这也导致程序难以编写,容易导致错误。对于C++程序员来讲,有两个必备的软件,是对付这类问题的好工具。Boundschecker和purifyplus。前者在调试时候,查找泄漏和错误很容易,后者有linux/unix/windows版本,还能查release版本的泄漏。
    Boundschecker使用的时候,一个主要的毛病是,容易误判泄漏,因为在debug的时候,好多代码重载了分配器(包括开发系统自己也这样干),导致最后有大量的报警,很多都是-全局分配器,这个分配器引起的。这就需要仔细分辨了。
    这两个工具,都要求你的程序能够正常退出结束,才能取得结果。
    查找内存泄漏的时候,一个技巧就是,优先寻找出现次数最多的那条,往往就是错误的根源所在。
    是不是所有的内存泄漏,都要消除呢?我认为答案是不确定的,看情况。理论上所有的内存泄漏,都需要消除、修正错误。但实际编程中,的确难以完全做到这点,我们的重点在于,绝对要消灭重复产生的那种类型,如果难以修正或者工程限制,来不及更改,可以放过一次性产生的泄漏问题。
    因为在程序运行周期内,只产生一次,等程序结束运行的时候,他使用的所有资源都会被操作系统回收。你就省事了。
    当然,这是投机取巧的办法,能消除的,还是尽量消除,因为这往往隐藏着设计漏洞和错误。
发表于 2008-3-5 10:24:46 | 显示全部楼层
哪里有破解版Boundschecker下载?
发表于 2008-3-19 22:15:20 | 显示全部楼层

顶一个

我觉得purify很好用,用这个东东来分析程序的运行结束后是否可以正常释放资源,而且在程序异常退出的时候(core dump) 还可以获取到相关的堆栈,以用收到的信号等等。在初步分析的时候,很省力气。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-6 22:49 , Processed in 0.013732 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表