C++检测和定位内存泄漏的技巧

在实际开发过程中项目中由于各方面原因,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,苌至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制t的语言时,在如何正确处理释放内存上会花费很长时间。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一立运行,一个小小的失误也会对程序造成重大影响,如造
成某些关键服务失败。

wikipedia中这样定义内存泄漏在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。最难捉摸也最难检测到的错误之一是内存泄漏,即未能正确释放以前分配的内存的bug。只发生一次小的内存泄漏可能不会被注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种征兆从性能不良(并且逐渐降低)到内存完全用尽。更糟糕的是,泄漏的程序可能会用掉太多内存,以致另一个程序失败,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能是其他问题的征兆。内存泄漏会因为减少可用内存的数量而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉,导致全部或部分设备停止正常工作,或者应用程序

崩溃。内存泄漏可能不严重,移至能够用常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。


在以下情下,内存泄漏会导致较严重的后果:
1.工程序运行后置之不理,时间久了消耗的内存越来越多(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务运行后可能很多年内都置之不理);

2·新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值