小弟最近要用Win32 API 里的HeapWalk函数,可是那个结构PROCESS_HEAP_ENTRY的内部几个数据的解释 在MSDN上非常语焉不详。搜遍了Google也没有找到这几个数据到底是啥意思的详细的解释,那位有这个资料,或者以前用过HeapWalk函数的帮帮忙。
解决方案 »
- 【F4 MM】 不在你的地盘里发蛋帖的MM不是好MM~~
- 关于抓包的问题
- 关于windows系统的硬件扫描驱动
- 请问在vc里怎么显示>256色的bitmap啊?
- 安装程序制作工具
- 在头文件前加class CMainFrame是什么意思?
- 有关CMemoryState的用法(给100分)
- 为什么我的VC编辑环境有时候参数和属性会出来,有时候又不会,我看了设置,statement completion options全部打勾了:(
- 使用线程 获取每个进程的CPU使用率
- MFC菜鸟问题:如何在CMainFrame中获得CComboBox的CBN_CLOSEUP消息
- 类的static变量和派生类的问题!急!
- 很奇怪的问题,请帮我看看为什么?
BOOL HeapWalk( HANDLE hHeap, // handle to the heap to enumerate
LPPROCESS_HEAP_ENTRY lpEntry // points to structure that maintains enumeration state information
);Example/* HEAPWALK.C: This program "walks" the heap, starting
* at the beginning (_pentry = NULL). It prints out each
* heap entry's use, location, and size. It also prints
* out information about the overall state of the heap as
* soon as _heapwalk returns a value other than _HEAPOK.
*/#include <stdio.h>
#include <malloc.h>void heapdump( void );void main( void )
{
char *buffer; heapdump();
if( (buffer = malloc( 59 )) != NULL )
{
heapdump();
free( buffer );
}
heapdump();
}void heapdump( void )
{
_HEAPINFO hinfo;
int heapstatus;
hinfo._pentry = NULL;
while( ( heapstatus = _heapwalk( &hinfo ) ) == _HEAPOK )
{ printf( "%6s block at %Fp of size %4.4X\n",
( hinfo._useflag == _USEDENTRY ? "USED" : "FREE" ),
hinfo._pentry, hinfo._size );
} switch( heapstatus )
{
case _HEAPEMPTY:
printf( "OK - empty heap\n" );
break;
case _HEAPEND:
printf( "OK - end of heap\n" );
break;
case _HEAPBADPTR:
printf( "ERROR - bad pointer to heap\n" );
break;
case _HEAPBADBEGIN:
printf( "ERROR - bad start of heap\n" );
break;
case _HEAPBADNODE:
printf( "ERROR - bad node in heap\n" );
break;
}
}
Output USED block at 002C0004 of size 0014
USED block at 002C001C of size 0054
USED block at 002C0074 of size 0024
USED block at 002C009C of size 0010
USED block at 002C00B0 of size 0018
USED block at 002C00CC of size 000C
USED block at 002C00DC of size 001C
USED block at 002C00FC of size 0010
USED block at 002C0110 of size 0014
USED block at 002C0128 of size 0010
USED block at 002C013C of size 0028
USED block at 002C0168 of size 0088
USED block at 002C01F4 of size 001C
USED block at 002C0214 of size 0014
USED block at 002C022C of size 0010
USED block at 002C0240 of size 0014
USED block at 002C0258 of size 0010
USED block at 002C026C of size 000C
USED block at 002C027C of size 0010
USED block at 002C0290 of size 0014
USED block at 002C02A8 of size 0010
USED block at 002C02BC of size 0010
USED block at 002C02D0 of size 1000
FREE block at 002C12D4 of size ED2C
OK - end of heap
在循环调用HeapWalk的时候,必须使用HeapLock和HeapUnlock函数,这样,当遍历堆栈时,其他线程将无法分配和释放堆栈中的内存块。
1. 我要用的是WIN32 API HeapWalk, 原型如下:
HeapWalkThe HeapWalk function enumerates the memory blocks in a specified heap.
BOOL HeapWalk(
HANDLE hHeap,
LPPROCESS_HEAP_ENTRY lpEntry
);
2。我想要知道的不是MSDN上已经写了的东西。主要是:
每次得到一个PROCESS_HEAP_ENTRY后,这个结构里数据的意义。比如说,我向统计整个Heap有多大,到底commit了多少physical memory, 保留了多少virtual memory. 我应该怎么根据这些标志和数据来计算。我已经有的计算方法好像不对。谢谢那位大人能够指点迷津拉