我正在尝试让我的应用程序使用后备列表进行内存管理。我从有关此主题的各种论文中了解以下详细信息。
- 后备列表位于堆基的偏移量 +0x688
- 每个成员的长度为 48 个字节。
- lookasidelist[0],lookasidelist[1] 未使用。
- lookasidelist[n] 块大小为 n*8,用于存储 (n-1)*8 字节块(剩余 8 字节用于头部),偏移量 0 指向包含大小为 (n-1) 的空闲块的链表)*8 以 null 结尾。
- 在 XP SP3 中默认启用后备列表,在 Vista/Win 7 系统中禁用(在 Vista/Win 7 中使用低碎片堆)
我面临的问题是我的应用程序似乎没有使用后备列表。似乎没有分配来自后备列表,并且所有释放的块都被移动到空闲列表。为了让应用程序使用后备列表,是否需要满足特定的编译器标志或条件?应用程序在 Microsoft Visual C++ 2010 速成版中编译,并在 Windows XP SP3 下进行测试。我正在使用免疫调试器来验证是否正在使用后备列表。如果有更好的方法请告诉我。