工控网首页
>

应用设计

>

蓝海微芯 WinCE查看内存泄露简记

蓝海微芯 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在自由存储区(堆)中申请一块内存。

 

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

 

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

投诉建议

提交

查看更多评论
其他资讯

查看更多

蓝海微芯 LJD-eWinA410 (嵌入型)LCD屏

蓝海微芯将参加2012年慕尼黑上海电子展

蓝海微芯携旗下系列产品出席第22界多国仪器仪表展

蓝海微芯 eWin触控PC特色应用编程技术

蓝海微芯 eWin触控PC外接微型打印机