2012-06-08 34 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是我见过它记录的唯一地方。

堆管理器会自动创建后备列表时堆是创建 ,只要不调试选项启用和堆是 扩张。