09年智手各组组长,组员重新招募中 发贴得礼品有实物,有金币和道具 重新招募09年各版版主 每月获奖名单
新人报到加分贴 对我们的意见告诉这里 新增奖品及奖励办法 广告招商
 
发新话题
打印

关于防止symbian中堆内存泄漏方法

关于防止symbian中堆内存泄漏方法

内存泄漏检测工具
检测已分配资源
第一个工具是一个内存资源使用的监听器.它只能在模拟器上进行调试.可以使用快捷键来调用
CTRL+ALT+SHIFT+A
显示已分配堆单元的数量
CTRL+ALT+SHIFT+B
显示已分配的文件服务器资源的数量
CTRL+ALT+SHIFT+C
显示已分配的窗口服务器资源的数量

堆检测宏
第二个工具可以在你指定的代码块中检测内存的分配情况.只需要把这些宏加入你要检测的代码部分即可:

功能
__UHEAP_MARK
开始检测堆的使用状况
__UHEAP_CHECK(n)
检测自上一个__UHEAP_MARK是否有’n’个堆被分配(尚未释放)
__UHEAP_CHECKALL(n)
检测是否有’n’个堆已分配
__UHEAP_MARKEND
检测结束,并检测在__UHEAP_MARK之后有没有未被释放的堆
__UHEAP_MARKENDC(n)
检测结束,并检测在__UHEAP_MARK之后有无’n’个未被释放的堆
这是一个简单的使用示例

Code:



CMyClass * a1 =
new(ELeave)CMyClass;

...

__UHEAP_MARK; //开始检测

CMyClass * a2 =
new(ELeave)CMyClass;

CMyClass * a3 =
new(ELeave)CMyClass;

...

__UHEAP_CHECK(2); //检测在__UHEAP_MARK之后有2个堆单元被分测(a2,a3)

__UHEAP_CHECKALL(3); //检测三个堆已被分配(a1,a2,a3)

delete(a2);

__UHEAP_MARKEND; // 结束检测,a3内存泄露

如果想设计驱动程序或内核模块,你可以使用__KHEAP_***宏来检测内核堆.

分配失效工具
用来进行压力测试.你可以使用下列宏

功能
__UHEAP_SETFAIL(aType, n)
可以根据参数的不同来指定下一个内存如何分配.
参数表如下:
EDeterministic:n个请求失败
ERandom:随机失败,n是随机数的种子
ETrueRandom:随机失败
__UHEAP_FAILNEXT(n)
引起下一分配失败
__UHEAP_RESET()
避免内存失败
也可以在模拟器中按CTRL+ALT+SHIFT+P和CTRL+ALT+SHIFT+Q来使用分配

没有及时释放堆上分配的对象,会造成内存泄露。
你可以参考这篇文章学习如何防止这种以外发生
http://www.newlc.com/Tracking-down-...che=memory+leak

另外在分配对象和释放对象时记录log是个好习惯,最后要匹配下是否分配和释放都能对应。

TOP

合金弹头4小游戏

提示: 作者被禁止或删除 内容自动屏蔽

TOP

发新话题
版块跳转 
   京ICP备06029169号

本社区言论纯属发表者个人意见  与 智手移动中文网论坛 立场无关