堆状态报告函数
本主题适用于:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
学习版 |
仅限本机 |
||||
专业版、高级专业版和旗舰版 |
仅限本机 |
有几个函数可报告给定时刻调试堆的内容。
_CrtMemState
若要捕获给定时刻堆状态的摘要快照,请使用 CRTDBG.H 中定义的 _CrtMemState 结构:
typedef struct _CrtMemState
{
// Pointer to the most recently allocated block:
struct _CrtMemBlockHeader * pBlockHeader;
// A counter for each of the 5 types of block:
size_t lCounts[_MAX_BLOCKS];
// Total bytes allocated in each block type:
size_t lSizes[_MAX_BLOCKS];
// The most bytes allocated at a time up to now:
size_t lHighWaterCount;
// The total bytes allocated at present:
size_t lTotalCount;
} _CrtMemState;
该结构保存指向调试堆的链接列表中的第一个(最近分配的)块的指针。 然后,它在两个数组中记录列表中每种类型的内存块(_NORMAL_BLOCK、_CLIENT_BLOCK、_FREE_BLOCK 等等)的个数,以及每种类型的块中分配的字节数。 最后,它记录到该点为止堆中总共分配的最大字节数以及当前分配的字节数。
其他 CRT 报告函数
下列函数报告堆的状态和内容,并使用这些信息帮助检测内存泄漏及其他问题:
函数 |
说明 |
---|---|
在应用程序提供的 _CrtMemState 结构中保存堆的快照。 |
|
比较两个内存状态结构,在第三个状态结构中保存二者之间的差异,如果两个状态不同,则返回 TRUE。 |
|
转储给定的 _CrtMemState 结构。 该结构可能包含给定时刻调试堆状态的快照或两个快照之间的差异。 |
|
转储有关在堆的给定快照之后,或是从执行开始时起,分配的所有对象的信息。 如果已经使用 _CrtSetDumpClient 安装挂钩函数,那么,该结构每次转储 _CLIENT_BLOCK 块时,都会调用应用程序所提供的挂钩函数。 |
|
确定自程序开始执行以来是否发生过内存泄漏,如果发生过,则转储所有已分配对象。 如果已经使用 _CrtSetDumpClient 安装挂钩函数,那么,_CrtDumpMemoryLeaks 每次转储 _CLIENT_BLOCK 块时,都会调用应用程序所提供的挂钩函数。 |