WinCE查看内存泄露简记


 首先是一个远程工具:Windows CE Remote Performance Moniter
 通过这个工具的Chart View可以很直观的看到内存的不断增长,工具本身是集成在EVC集成开发环境下的,具体的我没有找到单独的可执行文件。正如其名——远程性能监视器,所以它的功能并不局限于监视内存。


 可以Add一个Memory Load Counter,对于这个Counter Definition下面也有一个简单的介绍。Color,Scale,Width,Sytle均可修改。


 之后便能通过窗口非常直观的看到内存使用的实时变化,现在运行一个存在严重内存泄露的应用程序,看一下内存监视曲线图。


 内存使用直线上升,说明现在系统的内存泄露已经是相当严重了。看这个实时曲线图,只有在内存泄露非常严重的时候,才能看的直观。要是只存在轻微的内存泄露,从这看就是一条直线,看不出什么变化。

 内存使用情况也可以通过控制面板中的系统属性页来查看。现在程序内存总计40648KB,已使用18928KB。


 还是运行一下刚才那个存在严重内存泄露的程序。已使用的内存已经变为了22288KB,内存泄露一路狂飙。



 再来看一下Remote Heap Walker。


 RemoteHeapWalker.exe是测试程序,0x1A1C0000是分配的堆ID(Heap Id),0xA0C010CE是进程ID(Process Id),HF32_DEFAULT是一个标志,表示这是系统默认分配的堆。双击弹出Heap_List窗口,显示该堆的块列表。


 调试一下程序,通过new在自由存储区(堆)中申请一块内存。


 ptr指针保存的地址为0x001c8420。


 查看一下Heap_List,发现在0x1E1C8420地址处分配了48个字节,标志位是Fixed。为什么两个地址不一样呢?vs的监视器是从0x00000000地址开始计算的,Remote Heap Warker是从0x1E1.C0000(见第6幅图)开始计算的。new的是32个BYTE,这块为什么BlockSize是48呢?因为wince系统下,一个块大小是16个BYTE,这块一定要能够整除16。


 继续调试代码,执行delete [] ptr; 释放内存。

 再来查看Heap_List,发现0x1E1C8420地址处内存已经Free。


 先简单的记录这点内容,找时间要搜集一下WinCE内存泄露(memory leak)的发掘,定位,解决方案和辅助工具,这是一个值得深入的问题。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值