首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

XP 使用者模式記憶體空間剖析(七):堆積動態配置行為與最大塊測試

     編輯:關於C++

堆積基址發現

程式啟動後,malloc(10) 回傳指標 0x00B267B0,對應記憶體區塊顯示 Windows 採漸進式配置:初始僅保留少量認可頁面,隨需求擴展。

大塊配置觸發新區塊

malloc(0x10000)(64KB)導致新增一個獨立記憶體區塊,驗證 malloc 會向系統申請新的虛擬記憶體區域而非單純在現有保留區切分。

最大可配置塊測試

  • 掃描使用者空間尋找最大 MEM_FREE 區塊(nMaxSize)。
  • 直接 malloc(nMaxSize) 失敗,因 CRT 在配置時加入區塊頭資訊(_CrtMemBlockHeader + nNoMansLandSize),實際需求增大 0x24 bytes。
  • 調整為 malloc(nMaxSize - 0x124) 成功配置 885 MB。
  • 主控台應用程式(載入 DLL 較少)最大可配置達 1.8 GB(0x6C4D0000),但配置耗時十餘秒,系統回應極慢。

結論

系統 DLL 載入於高位址,騰出低位址大量連續空間供堆積擴展。malloc 最大配置受限於最大連續可用虛擬記憶體區塊大小減去管理開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved