嗯,众所周知,GlobalAlloc / GlobalFree / HeapAlloc / HeapFree API正在管理默认堆或用户定义的堆(CreateHeap),每个堆都有段,每个段都有多个块。众所周知,空闲列表和后备列表正在管理每堆中的空闲块。
In正在逆转一个软件,我发现正在使用VirtualAlloc来分配大块内存。基本上我不能说它是一个堆,因为块是直接从虚拟地址空间分配的,并且它没有显示任何堆的迹象。 但是应用程序中的一些例程将设置一个自定义的Freelist,它本身由应用程序管理,它用于定义和控制使用VirtualAlloc分配的大块的空闲部分。
我可以将此块称为HEAP,因为应用程序已设置管理它的Freelist结构吗?
答案 0 :(得分:1)
VirtualAlloc可以成功用于实现自定义内存管理器。我想这就是你的代码可能正在做的事情。它可能使用VirtualAlloc来保留连续的大地址空间,但它最初不提交它,这意味着没有从系统中检索物理内存。空闲列表可能指向此类未提交的地址空间。
VirtualAlloc实际上处于内存管理的最低级别,malloc库可能实际上是使用它实现的。