CMemoryState

CMemoryState提供了便利的方式以檢測程式中的“記憶體空洞”。“記憶體空洞”發生於已經為一個對象分配了記憶體,而在長期不再需要時也沒有釋放。這樣的記憶體空洞最終可能導致記憶體溢出錯誤。

基本介紹

CMemoryState類沒有基類
有幾種方式來為程式分配或重新分配記憶體:
·使用運行庫中的函式的malloc/free家族。·使用Windows API記憶體管理函式LocalAlloc/LocalFree和GlobalAlloc/Global Free。·使用C++ new和delete操作。
CMemoryState 診斷只能用於幫助檢測記憶體空洞,該空洞的產生是由於使用new操作分配了記憶體而沒有使用delete進行刪除。另外兩組記憶體管理函式是針對非C++程式的,不推薦在同一程式中將它們與new/delete混合使用。當需要檔案及記憶體分配的行跟蹤,那么提供一個附加的宏DEBUG_NEW來替換new操作。通常,不管是否使用了new操作,都需要使用DEBUG_NEW宏。
與其它診斷相同,CMemoryState診斷也僅僅在程式的調試版中有效。
調試版必須有_DEBUG常量定義。
如果懷疑程式中有記憶體空洞,那么可以使用Checkpoint, Difference及DumpStatistics 函式來找出程式執行完成後,兩個不同點之間記憶體狀態(分配記憶體的對象)的不同。該信息對於決定函式是否清除了所有分配記憶體的對象非常有用。
如果僅僅知道當記憶體分配或記憶體釋放時不均衡發生於何處,它並沒有提供足夠的信息,因此可以使用DumpAllObjectSince函式來轉儲自從前一次調用Checkpoint函式以來分配的所有對象。這種轉儲顯示了記憶體分配次序,源檔案及被分配對象所在的行(條件是使用了DEBUG_NEW)以及派生對象、其地址、大小。DumpAllObjectSince對象也調用了每一個對象的Dump函式以提供有關的信息。
注意:
CMemoryState類型的對象聲明以及成員函式的調用必須用#ifdefined(_DEBUG)/#endif括起來,以便僅在程式的調試版本中包含記憶體診斷。
CMemoryState類的成員
CMemoryState構造一個控制記憶體檢查點的似類結構Checkpoint取得當前記憶體狀態的一個快照或“檢查點”
操作
Difference計算兩個CMemoryState類型的對象之間的差異DumpAllObjectsSince從前一個檢查點開始轉儲所有分配對象的摘要DumpStatistics列印一個CMemoryState 對象的記憶體分配統計信息

相關詞條

熱門詞條

聯絡我們