2012-06-08 35 views
0

我想讓我的應用程序使用lookaside列表進行內存管理。我知道關於這個主題的各種論文的以下細節。觸發Lookaside列表

  1. 後備列表位於偏移+ 0x688從堆中基
  2. 每個成員是48個字節長。
  3. lookasidelist [0],未使用lookasidelist [1]。
  4. lookasidelist [n]塊大小爲n * 8,用於存儲(n-1)* 8個字節塊(其餘8個字節用於標頭),偏移量0指向包含空閒塊大小的鏈接列表n-1)* 8以null結束。
  5. 後備列表默認情況下,在XP SP3啓用,在Vista/Win中禁用7系統(低碎片堆在Vista/Win 7的使用)

,我現在面臨的問題是,我的應用程序似乎不使用旁視列表。似乎沒有分配來自後備列表,所有釋放的塊都被移動到freelist。是否存在特定的編譯器標誌或需要滿足的條件才能讓應用程序使用後備列表? 應用程序在Microsoft Visual C++ 2010快速版中編譯並在Windows XP SP3下進行測試。我正在使用免疫調試器來驗證是否正在使用旁路列表。如果有更好的方法,請告訴我。

回答

1

不是通過調試器運行進程,而是在運行時附加到進程上,發現應用程序決定在未調試時使用後備列表。 This是我見過它記錄的唯一地方。

堆管理器會自動創建後備列表時堆是創建 ,只要不調試選項啓用和堆是 擴張。