【发布时间】:2013-06-30 00:08:46
【问题描述】:
似乎 MS CRT(在我的例子中是来自 VS2005 的msvcr80.dll)使用的堆不同于GetProcessHeap() 返回的标准进程堆。
在 Windows XP 上,使用HeapCreate 创建的堆的默认设置是非低碎片化。如何让 CRT 改用低碎片堆?
【问题讨论】:
标签: winapi visual-c++ heap-memory msvcrt
似乎 MS CRT(在我的例子中是来自 VS2005 的msvcr80.dll)使用的堆不同于GetProcessHeap() 返回的标准进程堆。
在 Windows XP 上,使用HeapCreate 创建的堆的默认设置是非低碎片化。如何让 CRT 改用低碎片堆?
【问题讨论】:
标签: winapi visual-c++ heap-memory msvcrt
在此处查看示例:_get_heap_handle :
intptr_t _get_heap_handle( void );
返回 C 运行时系统使用的 Win32 堆的句柄。
如果要调用 HeapSetInformation 并启用,请使用此函数 CRT 堆上的低碎片堆。
// 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;
}
【讨论】: