heapQueryInformation 函数 (heapapi.h)

检索有关指定堆的信息。

语法

BOOL HeapQueryInformation(
  [in, optional]  HANDLE                 HeapHandle,
  [in]            HEAP_INFORMATION_CLASS HeapInformationClass,
  [out]           PVOID                  HeapInformation,
  [in]            SIZE_T                 HeapInformationLength,
  [out, optional] PSIZE_T                ReturnLength
);

参数

[in, optional] HeapHandle

要检索其信息的堆的句柄。 此句柄由 HeapCreateGetProcessHeap 函数返回。

[in] HeapInformationClass

要检索的信息类。 此参数可以是 HEAP_INFORMATION_CLASS 枚举类型的以下值。

含义
HeapCompatibilityInformation
0
指示已启用的堆功能。

HeapInformation 参数是指向 ULONG 变量的指针。

如果 HeapInformation 为 0,则堆是不支持旁观列表的标准堆。

如果 HeapInformation 为 1,则堆支持旁观列表。 有关详细信息,请参阅“备注”。

如果 HeapInformation 为 2,则为 堆启用了低碎片堆 (LFH) 。 启用 LFH 会禁用旁观列表。

[out] HeapInformation

指向接收堆信息的缓冲区的指针。 此数据的格式取决于 HeapInformationClass 参数的值。

[in] HeapInformationLength

正在查询的堆信息的大小(以字节为单位)。

[out, optional] ReturnLength

指向变量的指针,该变量接收写入到 HeapInformation 缓冲区的数据的长度。 如果缓冲区太小,函数将失败, ReturnLength 指定缓冲区所需的最小大小。

如果不想接收此信息,请指定 NULL

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

若要启用 LFH 或损坏时终止功能,请使用 HeapSetInformation 函数。

Windows XP 和 Windows Server 2003: 旁观列表是一种仅包含固定大小的块的快速内存分配机制。 默认情况下,为支持它们的堆启用旁观列表。 从 Windows Vista 开始,不使用旁观列表,并且默认启用 LFH。

旁观列表比大小不同的常规池分配更快,因为系统不会搜索适合该分配的可用内存。 此外,通常使用快速原子处理器交换指令(而不是互斥或自转锁)来同步对旁观列表的访问。 旁观列表可以由系统或驱动程序创建。 可以从分页池或非分页池中分配它们。

示例

以下示例使用 GetProcessHeap 获取默认进程堆的句柄,并使用 HeapQueryInformation 检索有关堆的信息。

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define HEAP_STANDARD 0
#define HEAP_LAL 1
#define HEAP_LFH 2

int __cdecl _tmain()
{
    BOOL bResult;
    HANDLE hHeap;
    ULONG HeapInformation;

    //
    // Get a handle to the default process heap.
    //
    hHeap = GetProcessHeap();
    if (hHeap == NULL) {
        _tprintf(TEXT("Failed to retrieve default process heap with LastError %d.\n"),
                 GetLastError());
        return 1;
    }

    //
    // Query heap features that are enabled.
    //
    bResult = HeapQueryInformation(hHeap,
                                   HeapCompatibilityInformation,
                                   &HeapInformation,
                                   sizeof(HeapInformation),
                                   NULL);
    if (bResult == FALSE) {
        _tprintf(TEXT("Failed to retrieve heap features with LastError %d.\n"),
                 GetLastError());
        return 1;
    }

    //
    // Print results of the query.
    //
    _tprintf(TEXT("HeapCompatibilityInformation is %d.\n"), HeapInformation);
    switch(HeapInformation)
    {
    case HEAP_STANDARD:
        _tprintf(TEXT("The default process heap is a standard heap.\n"));
        break;
    case HEAP_LAL:
        _tprintf(TEXT("The default process heap supports look-aside lists.\n"));
        break;
    case HEAP_LFH:
        _tprintf(TEXT("The default process heap has the low-fragmentation ") \
                 TEXT("heap enabled.\n"));
        break;
    default:
        _tprintf(TEXT("Unrecognized HeapInformation reported for the default ") \
                 TEXT("process heap.\n"));
        break;
     }

    return 0;
}

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 heapapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

GetProcessHeap

堆函数

HeapCreate

HeapSetInformation

内存管理函数