内存泄漏是指未能正确释放以前分配的内存的bug。它会因为减少可用内存的数量从而降低计算机的性能;在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
一、Windows平台一般在vs中,我们利用C运行时(CRT)库来检测和识别内存泄漏。
C运行时库运行原理内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。说白了,定位的关键:对应用程序的内存状态拍快照。
示例#define_CRTDBG_MAP_ALLOC
#includestdlib.h
#includeiostream
#includecrtdbg.h
usingnamespacestd;
_CrtMemStates1,s2,s3;
voidgetMemory(char*p,intnum)
{
p=(char*)malloc(sizeof(char)*num);
}
int_tmain(intargc,_TCHAR*argv[])
{
_CrtMemCheckpoint(s1);
char*str=NULL;
getMemory(str,);
_CrtMemCheckpoint(s2);
if(_CrtMemDifference(s3,s1,s2))
_CrtMemDumpStatistics(s3);
cout"memoryleaktest."endl;
_CrtDumpMemoryLeaks();
return0;
}
我们也可以利用processhacker管理工具来查看内存泄露。
二、Linux平台内存泄露检测工具valgrind。