内存泄漏以及常见的解决方法

来源:互联网 发布:网络教育如何考试 编辑:程序博客网 时间:2024/06/03 21:19
1. 什么是内存泄漏(memory leak)?

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

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

3. 如何解决内存泄露?

第一,良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。

使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完毕。

第二,重载  new 和 delete。其主要思路是将分配的内存以链表的形式自行管理,使用完毕之后从链表中删除,程序结束时可检查改链表,其中记录了内存泄露的文件,所在文件的行数以及泄露的大小

第三,Boost 中的smart pointer

点击打开链接

0 0