3

似乎 MS CRT(msvcr80.dll在我的例子中来自 VS2005)使用的堆不同于GetProcessHeap().

在 Windows XP 上,创建的堆的默认设置HeapCreate是非低碎片化。我如何告诉 CRT 使用低碎片堆代替?

4

1 回答 1

3

请参阅此处的示例:_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;
}
于 2013-07-02T14:50:51.157 回答