似乎 MS CRT(msvcr80.dll
在我的例子中来自 VS2005)使用的堆不同于GetProcessHeap()
.
在 Windows XP 上,创建的堆的默认设置HeapCreate
是非低碎片化。我如何告诉 CRT 使用低碎片堆代替?
似乎 MS CRT(msvcr80.dll
在我的例子中来自 VS2005)使用的堆不同于GetProcessHeap()
.
在 Windows XP 上,创建的堆的默认设置HeapCreate
是非低碎片化。我如何告诉 CRT 使用低碎片堆代替?
请参阅此处的示例:_get_heap_handle :
intptr_t _get_heap_handle( void );
返回 C 运行时系统使用的 Win32 堆的句柄。
如果要调用 HeapSetInformation 并在 CRT 堆上启用 Low Fragmentation Heap,请使用此函数。
// crt_get_heap_handle.cpp
// compile with: /MT
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
int main(void)
{
intptr_t hCrtHeap = _get_heap_handle();
ULONG ulEnableLFH = 2;
if (HeapSetInformation((PVOID)hCrtHeap,
HeapCompatibilityInformation,
&ulEnableLFH, sizeof(ulEnableLFH)))
puts("Enabling Low Fragmentation Heap succeeded");
else
puts("Enabling Low Fragmentation Heap failed");
return 0;
}