内存泄漏是什么??

什么是内存泄漏(memory leak)?

指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内情人q存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费

我们主要关注两种类型的内存泄漏:

  堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak.
系统资源泄露(Resource Leak).主要指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。

如何解决内存泄露?

内存泄露的问题其困难在于

1.编译器不能发现这些问题

2.运行时才能捕获到这些错误,这些错误没有明显的症状,时隐时现。

3.对于手机等终端开发用户来说,尤为困难。下面从三个方面来解决内存泄露

第一,良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。
使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完毕。
第二,重载  new 和 delete。这也是大家编码过程中常常使用的方法。
其主要思路是将分配的内存以链表的形式自行管理,使用完毕之后从链表中删除,程序结束时可检查改链表,其中记录了内存泄露的文件,所在文件的行数以及泄露的大小哦。


第三,Boost 中的smart pointer(待完善,结合大家的建议)

第四,一些常见的工具插件

你可能感兴趣的:(内存泄漏是什么??)