《手机内存检测》PPT课件.ppt
《《手机内存检测》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《手机内存检测》PPT课件.ppt(28页珍藏版)》请在三一办公上搜索。
1、1,内存泄漏检测,2,主要内容,3,内存泄漏的定义,程序中的内存结构程序中内存分为堆、栈、全局/静态存储区和常量存储区.全局常量位于常量存储区.全局变量位于静态数据区.局部变量以及函数参数变量位于栈.使用new/malloc分配的内存位于堆上.,栈,代码区,静态数据区,高端内存区域,常量存储区,堆,低端内存区域,常量存储区域和静态数据区域的内存在程序退出时释放,栈中分配的内存在变量离开其作用域时释放,堆中分配的内存必须显示的释放,4,内存泄漏的定义,内存泄漏的定义程序中从堆中分配的内存在使用完毕后忘记释放,从而失去对该块内存的控制,导致该块内存一直被占用直至程序退出。程序一直分配内存,直到程序
2、退出才释放所有内存。内存泄漏的危害程序占用内存越来越多,使得整个系统运行速度越来越慢。糟糕者可用内存耗尽,应用程序崩溃。,5,内存泄漏的定义,内存泄漏的分类常发性内存泄漏发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。一次性内存泄漏发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。偶发性内存泄漏发生内存泄漏的代码只会被执行一次隐式内存泄漏程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存,6,内存泄漏原因分析,new出来的对象没有dele
3、te代码中没有delete的地方指针被重新赋值了,赋值前没有delete逻辑分支考虑不全。函数内部逻辑考虑不周。接口调用时序逻辑考虑不全,CUDPSocket*CreateUdpSocket(const std:string,内存泄漏原因分析,基类析构函数非虚当基类指针指向派生类对象,delete该基类指针时派生类对象的析构不会被调用。如果派生类中使用了stl容器或者从堆中分配内存的作为成员变量,那么内存泄漏就悄无声息的发生了。,7,class CIavpMsgpublic:CIavpMsg()CIavpMsg()printf(CIavpMsg()rn);class CLogMsg:publi
4、c CIavpMsgpublic:CLogMsg()CLogMsg()printf(CLogMsg()rn);public:string m_sTime;,int _tmain(int argc,_TCHAR*argv)CIavpMsg*pMsg=new CLogMsg();string,内存泄漏原因分析,8,内存泄漏原因分析,delete一个只有声明没有定义的类 为了避免C/C+头文件中包含很多的其他头文件,通常将关联到的其他类型声明一下即可,在真正使用的地方包含其类定义的头文件。如果在某个地方delete一个只有声明,而没有包含其类定义的头文件,那么该delete将不会去调用该类的析构函数
5、。其结果和基类析构非虚导致派生类的析构不被调用的后果一样。,9,#pragma onceclass CIavpMsg;class CIavpMsgFactorypublic:/从网络收到的消息创建成一个IavpMsg CIavpMsg*DynamicCreateMsg(const char*pMsgStream,int nStreamLen);,#include stdafx.h#include iavpmsgfactory.hint _tmain(int argc,_TCHAR*argv)CIavpMsgFactory oMsgFactory;CIavpMsg*pMsg=oMsgFactor
6、y.DynamicCreateMsg(0,0);/DoSomeThingWithIavpMsg(pMsg);delete pMsg;return 0;,内存泄漏原因分析,向容器中不断的添加内容,而不删除内容。写代码时疏忽,逻辑判断不正确导致此种情况发生。接口设计不良,容器删除的职责不明。,10,内存泄漏原因分析,11,class CTTSPlayerpublic:TTSPlayTaskID PrepareTask(const char*ttstext,TtsPlayResultHandler,Play失败,异步通知给调用者,调用者认为Play已经失败,没有必要再去调用Stop接口了,map容器
7、中保存的对象永远不会被删除了,直至程序退出,从而导致内存泄漏!,内存泄漏原因分析,指针所有权不明函数返回一个指针,却没说明该谁释放。,12,class CRtspClientpublic:/其他方法声明/向RTSP服务器发送Option消息,返回服务器的响应结果 char*SendOption();private:/成员变量声明;,返回值要不要delete?,内存泄漏原因分析,SDK或第三方库使用不当FormatMessage方法指定FORMAT_MESSAGE_ALLOCATE_BUFFER则该方法得到的字符串为系统分配,需要LocalFree释放该字符串。,13,int _tmain(in
8、t argc,_TCHAR*argv)TCHAR*buffer=new TCHAR100;TCHAR*pClone=buffer;ZeroMemory(pClone,100);TCHAR*s=orig orig orig orig;memcpy(pClone,s,strlen(s);DWORD error=ERROR_STACK_OVERFLOW;DWORD dwRet=:FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,error,0,(LPTSTR),内存泄漏检测方法,代码检查所有的ne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机内存检测 手机 内存 检测 PPT 课件
链接地址:https://www.31ppt.com/p-5513854.html