WEB开发网
开发学院软件开发VC 模拟器和远程调试工具(二) 阅读

模拟器和远程调试工具(二)

 2007-03-17 21:26:55 来源:WEB开发网   
核心提示:3、远程堆查看程序(Remote Heap Walker)显然“Walker”不能翻译成“查看”,你愿意怎么翻译就怎么翻译吧,模拟器和远程调试工具(二),在这里我就叫查看了,这样容易理解,标志给谁看的?由谁释放啊?这涉及到内存的管理,内核的OOM组件,从名字就可以看出它是

3、远程堆查看程序(Remote Heap Walker)

显然“Walker”不能翻译成“查看”。你愿意怎么翻译就怎么翻译吧。在这里我就叫查看了,这样容易理解。从名字就可以看出它是用来查看操作系统中每个进程使用的堆的情况。什么是堆就不用我说了吧!堆大家都了解,但是CE下关于堆的知识也值得一说。以后我会有专门讲述CE下进程、线程、和内存管理方面的文章发表,那时会说的非常详细。利用“远程堆查看程序”能够查看到:

内核中正运行的进程的名字、ID、及使用的所有的堆的ID。如图1所示

进程的一个堆中的首地址、结束地址、及标志(Fixed、Free)

堆中每块(Block)的实际内容

图 1 进程列表

查看和使用这个工具是很简单的事情。不过前提是你对堆有所了解。下面我说说和这个工具有关的涉及到堆的知识。CE下每个进程启动时,系统会自动分配192KB的局部堆给这个进程。要是不够你就通过调用堆管理函数自己再分配自定义大小的堆。自己分配的堆,包括系统给你分配的堆,都由ID来标识。如图中所示的Heap ID。进程ID和进程名就不用说了。后面的“Flag”只有一个值“HF32_DEFAULT”,表示系统默认分配的堆。 图中的“device.exe”,有四个都一样。但从进程ID就可以看出这是一个进程,而不是一个应用程序的四个实例。因为列表是以堆为单位,“device.exe”分配了四个堆,就显示了四个。

双击列表中任何一项,弹出这个堆的包含的块的列表。列出块的首地址、大小、标志。我们分配了一个堆,就可以在堆中分配数组、结构等。这个块就指每个分配的元素。标志中“Fixed”表示不能释放这个块占据的内存空间。而“Free”则相反,表示能够释放这个块占据的内存空间。看到这,也许你会有疑问,标志给谁看的?由谁释放啊?这涉及到内存的管理,内核的OOM组件。在以后的文章中我会做详细的解释。

1 2 3 4  下一页

Tags:模拟器 远程 调试

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接