【发布时间】:2014-01-15 20:20:19
【问题描述】:
好吧,众所周知,GlobalAlloc/GlobalFree/HeapAlloc/HeapFree API 正在管理默认堆或用户定义的堆 (CreateHeap),每个堆都有段,每个段都有多个块。众所周知,Freelist 和后备列表正在管理每个堆中的空闲块。
In 正在反转一个软件,我发现它正在使用 VirtualAlloc 来分配一大块内存。基本上我不能说它是一个堆,因为该块是直接从虚拟地址空间分配的,并且它没有显示出任何堆的迹象。 但是应用程序中的一些例程会设置一个自定义的 Freelist,它本身由应用程序管理,它用于定义和控制使用 VirtualAlloc 分配的大块的空闲部分。
我可以将此块称为 HEAP,因为应用程序已经设置了一个管理它的 Freelist 结构吗?
【问题讨论】:
-
如果你愿意,你可以称它为香蕉。你真正想知道什么?
-
我实际上正在破坏该块并覆盖应用程序设置的 flink/blink 指针,我想写一篇关于它的文章,我害怕将分配的块称为一堆!因为它不是,它只是应用程序编辑的 VAS 中的一块内存,因此它可以获得堆的一些特性!
-
所以你回答了你自己的问题,它不是一个堆。
-
我只是想确定一下,谢谢!
标签: c++ windows memory memory-management