【问题标题】:How do I tell the MS CRT to use a Low Fragmentation Heap on Windows XP?如何告诉 MS CRT 在 Windows XP 上使用低碎片堆?
【发布时间】:2013-06-30 00:08:46
【问题描述】:

似乎 MS CRT(在我的例子中是来自 VS2005 的msvcr80.dll)使用的堆不同于GetProcessHeap() 返回的标准进程堆。

在 Windows XP 上,使用HeapCreate 创建的堆的默认设置是非低碎片化。如何让 CRT 改用低碎片堆?

【问题讨论】:

    标签: winapi visual-c++ heap-memory msvcrt


    【解决方案1】:

    在此处查看示例:_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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 2016-11-05
      • 2012-04-05
      • 2010-09-14
      • 1970-01-01
      • 2014-07-14
      • 2010-09-11
      • 2010-12-13
      • 2018-02-12
      相关资源
      最近更新 更多