触发旁视列表

时间:2012-06-08 18:41:50

标签: windows visual-c++ memory-management heap internals

我正在尝试让我的应用程序使用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中使用低碎片堆)
  6. 我面临的问题是我的应用程序似乎没有使用Lookaside列表。没有分配似乎来自旁视列表,并且所有释放的块都被移动到freelist。是否需要满足特定的编译器标志或条件才能使应用程序使用旁视列表? 应用程序在Microsoft Visual C ++ 2010快速版中编译,并在Windows XP SP3下进行测试。我正在使用免疫调试器来验证是否正在使用旁视列表。如果有更好的方法请告诉我。

1 个答案:

答案 0 :(得分:1)

不是通过调试器运行进程,而是在运行时附加到进程,这表明应用程序在未进行调试时决定使用旁视列表。 This是我见过的唯一记录的地方。

  

堆堆栈管理器自动创建后备列表   创建,只要没有启用调试选项并且堆是   可扩展的。