堆積狀態報告函式
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
僅適用原生 |
|||
Standard 版 |
僅適用原生 |
|||
Pro/Team 版 |
僅適用原生 |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
許多函式會在指定的時間報告偵錯堆積的內容。
_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 區塊時,它會呼叫應用程式所提供的攔截函式。 |