【发布时间】:2014-08-16 17:10:50
【问题描述】:
我正在实现一个堆池实用程序,我需要一个 pool_clear() 函数(如 Apache Portable Runtime apr_pool_clear())。此函数允许我们立即释放(单个函数调用)该池上分配的所有内存,而无需将内存页面释放到底层系统。 Windows API 仅提供 HeapFree()(多个函数调用)和 HeapDestroy()(释放内存页面)。
有没有办法在 Windows 上做到这一点(使用原生 API)?
【问题讨论】:
-
“免费”是指“取消提交物理页面”,还是“标记为未被堆管理器使用但保持物理页面提交”? (注意,“释放”与这两者不同,它释放虚拟地址空间以及物理内存。)
-
@Mehrdad,OP 使用
apr_pool_clear作为类比,这让我相信他希望内存留在VirtualAlloc'd 但允许被堆重用。 -
你不使用 VirtualAlloc 等吗?
-
我使用 HeapCreate 创建堆,并将它与 HeapAlloc 和 HeapFree 一起使用。我要的是一种在不调用 HeapDestroy 的情况下一次性释放 HeapAlloc 分配的所有内存块的方法(我想重用该堆)。
-
那是你的问题。你需要采取更多的控制。使用 VirtualAlloc 等。
标签: winapi heap-memory