1. 程式人生 > >【Tools】WinDbg--gflags除錯工具使用方法

【Tools】WinDbg--gflags除錯工具使用方法

page heap:頁堆。

什麼是 Page Heap (頁堆)?

    從 Windows 2000 開始作業系統開始在堆管理器引入“校驗層”,即 Page Heap 管理器。這個校驗層處於 Ntdll.dll模組內。可以驗證應用程式所有的動態記憶體操作(讀寫、分配、釋放及其它操作)。

頁堆有兩種型別:正常頁堆和完全頁堆( Full Page Heap )

完全頁堆:

    當分配一塊記憶體時,通過調整記憶體塊的分配位置,使其結尾恰好與系統分頁邊界對齊,然後在邊界處再多分配一個不可訪問的頁作為保護區域。這樣,一旦出現記憶體讀 / 寫越界時,程序就會 Crash ,從而幫助及時檢查記憶體越界。

     因為每次分配的記憶體都要以這種形式佈局,尤其對於小片的記憶體分配,即使分配一個位元組,也要分配一個記憶體頁,和一個保留的虛擬記憶體頁(注意在目前的實現中,這個用作邊界保護區域的頁從來不會被提交)。這就需要大量的記憶體,到底一個程序需要多少記憶體,很難估算,因此在使用 Page Heap 前,至少保證你的機器至少設定了 1G 虛擬記憶體以上。

正常頁堆:

    正常頁堆原理與 CRT 除錯記憶體分配函式類似,通過分配少量的填充資訊,在釋放記憶體塊時檢查填充區域。來檢測記憶體是否被損壞,此方法的優點是極大的減少了記憶體耗用量。缺點是隻能在釋放塊時檢測,不太好跟蹤出錯的程式碼位置。

    Page Heap 選項位於登錄檔目錄: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/ 你的可執行程式名 / 。當 Windows 開始啟動一個程序時, Window 通過檢查這個登錄檔目錄的設定,對該程序應用相應的 PageHeap

 選項PageHeap的功能是作業系統本身就有的,gflags工具只是用來對可執行程式設定PageHeap選項。