0

我正在尝试让我的应用程序使用后备列表进行内存管理。我从有关此主题的各种论文中了解以下详细信息。

  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 中使用低碎片堆)

我面临的问题是我的应用程序似乎没有使用后备列表。似乎没有分配来自后备列表,并且所有释放的块都被移动到空闲列表。为了让应用程序使用后备列表,是否需要满足特定的编译器标志或条件?应用程序在 Microsoft Visual C++ 2010 速成版中编译,并在 Windows XP SP3 下进行测试。我正在使用免疫调试器来验证是否正在使用后备列表。如果有更好的方法请告诉我。

4

1 回答 1

1

不是通过调试器运行进程,而是在运行时附加到进程显示应用程序决定在未调试时使用后备列表。是我看到它记录的唯一地方。

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

于 2012-06-11T20:37:34.390 回答