返回蓝海微芯首页
English    繁體中文
 
您当前的位置: 首页 >> 应用设计 >> Windows_CE应用文摘 >> 正文
WinCE查看内存泄露简记
发表时间:2011-1-8     点击数:

首先是一个远程工具:Windows CE Remote Performance Moniter

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

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

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

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

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

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

再来看一下Remote Heap Walker

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

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

ptr指针保存的地址为0x001c8420

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

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

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

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

产品中心 |  应用设计 |  资料下载 |  联系我们
版权所有 ©2009 北京蓝海微芯科技发展有限公司 |  京ICP备05033575  
本网站所有资料未经许可,禁止复制、转载。您对我们网站有什么建议或意见,请联系我们。
北京市公安局网络报警报警中心