什么是内存泄漏呢?
内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而
造成了内存的浪费。
内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统,后台服务等等出现内存泄漏会导致响应越来越慢,最终卡死。
比如我申请了1个G的内存空间,如果忘记了或其他原因释放指向的空间,就会导致内存泄漏。
int main()
{
char* p = new char[1024*1024*1024];
//没有释放 就会内存泄漏
//delete p;
return 0;
}
在任务管理器可以看到有1g多的空间被占用
如何避免内存泄漏
1.工程前期良好的设计规范,养成良好的编码规范,申请的内存空间记着匹配的去释放。ps:这个理想状态。但是如果碰上异常时,就算注意释放了,还是可能会出问题。需要下一条智能指针来管理才有保证。
2.采用RAII思想或者智能指针来管理资源。
3.有些公司内部规范使用内部实现的私有内存管理库。这套库自带内存泄漏检测的功能选项。
4.出问题了使用内存泄漏工具检测。ps;不过很多工具都不够靠谱,或者收费昂贵。
总结一下:
内存泄漏非常常见,解决方案分为两种:1、事前预防型。如智能指针等。2、事后查错型。如泄漏检测工具。
相关面试题:如何一次在堆上申请4G的内存?
//将程序编译成x64的进程,运行下面的程序试试? #include <iostream> using namespace std; //x32位只有4g的内存空间 所以申请不了 必须得换成64位的 int main() { size_t n = 2; void* p = new char[n * 1024 * 1024 * 1024]; cout << "new:" << p << endl; return 0; }