东莞搜索引擎网站推广,广告公司名称推荐,中国小康建设网 是个什么网站,深圳建一个网站要多少钱目录 一.内存泄漏 1.什么是内存泄漏#xff0c;内存泄漏的危害
2.内存泄漏分类
3.如何检测内存泄漏
4.如何避免内存泄漏 一.内存泄漏 1.什么是内存泄漏#xff0c;内存泄漏的危害 什么是内存泄漏#xff1a;内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存…目录 一.内存泄漏 1.什么是内存泄漏内存泄漏的危害
2.内存泄漏分类
3.如何检测内存泄漏
4.如何避免内存泄漏 一.内存泄漏 1.什么是内存泄漏内存泄漏的危害 什么是内存泄漏内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失而是应用程序分配某段内存后因为设计错误失去了对该段内存的控制因而造成了内存的浪费。 内存泄漏的危害长期运行的程序出现内存泄漏影响很大如操作系统、后台服务等等出现内存泄漏会导致响应越来越慢最终卡死。 void MemoryLeaks()
{// 1.内存申请了忘记释放int* p1 (int*)malloc(sizeof(int));int* p2 new int;// 2.异常安全问题int* p3 new int[10];Func(); // 这里Func函数抛异常导致 delete[] p3未执行p3没被释放.delete[] p3;
} 2.内存泄漏分类 C/C程序中一般我们关心两种方面的内存泄漏 堆内存泄漏(Heap leak) 堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放那么以后这部分空间将无法再被使用就会产生Heap Leak。 系统资源泄漏 指程序使用系统分配的资源比方套接字、文件描述符、管道等没有使用对应的函数释放掉导致系统资源的浪费严重可导致系统效能减少系统执行不稳定。 3.如何检测内存泄漏 在vs下可以使用windows操作系统提供的_CrtDumpMemoryLeaks() 函数进行简单检测该函数只报出了大概泄漏了多少个字节没有其他更准确的位置信息。 int main()
{int* p new int[10];// 将该函数放在main函数之后每次程序退出的时候就会检测是否存在内存泄漏_CrtDumpMemoryLeaks();return 0;
}// 程序退出后在输出窗口中可以检测到泄漏了多少字节但是没有具体的位置
Detected memory leaks!
Dumping objects -
{79} normal block at 0x00EC5FB8, 40 bytes long.
Data: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 因此写代码时一定要小心尤其是动态内存操作时一定要记着释放。但有些情况下总是防不胜防简单的可以采用上述方式快速定位下。如果工程比较大内存泄漏位置比较多不太好查时一般都是借助第三方内存泄漏检测工具处理的。 4.如何避免内存泄漏 1. 工程前期良好的设计规范养成良好的编码规范申请的内存空间记着匹配的去释放。ps这个理想状态。但是如果碰上异常时就算注意释放了还是可能会出问题。需要下一条智 能指针来管理才有保证。 2. 采用RAII思想或者智能指针来管理资源。 3. 有些公司内部规范使用内部实现的私有内存管理库。这套库自带内存泄漏检测的功能选项。 4. 出问题了使用内存泄漏工具检测。ps不过很多工具都不够靠谱或者收费昂贵。 总结一下: 内存泄漏非常常见解决方案分为两种1、事前预防型。如智能指针等。2、事后查错型。如泄漏检测工具