Compartilhar via


Função HeapQueryInformation (heapapi.h)

Recupera informações sobre o heap especificado.

Sintaxe

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

Parâmetros

[in, optional] HeapHandle

Um identificador para o heap cujas informações devem ser recuperadas. Esse identificador é retornado pela função HeapCreate ou GetProcessHeap .

[in] HeapInformationClass

A classe de informações a ser recuperada. Esse parâmetro pode ser o valor a seguir do tipo de enumeração HEAP_INFORMATION_CLASS .

Valor Significado
HeapCompatibilityInformation
0
Indica os recursos de heap habilitados.

O parâmetro HeapInformation é um ponteiro para uma variável ULONG .

Se HeapInformation for 0, o heap será um heap padrão que não dá suporte a listas de look-aside.

Se HeapInformation for 1, o heap oferecerá suporte a listas de look-aside. Para obter mais informações, consulte Comentários.

Se HeapInformation for 2, o heap de baixa fragmentação (LFH) foi habilitado para o heap. Habilitar o LFH desabilita listas de look-aside.

[out] HeapInformation

Um ponteiro para um buffer que recebe as informações de heap. O formato desses dados depende do valor do parâmetro HeapInformationClass .

[in] HeapInformationLength

O tamanho das informações de heap que estão sendo consultadas, em bytes.

[out, optional] ReturnLength

Um ponteiro para uma variável que recebe o comprimento dos dados gravados no buffer HeapInformation . Se o buffer for muito pequeno, a função falhará e ReturnLength especificará o tamanho mínimo necessário para o buffer.

Se você não quiser receber essas informações, especifique NULL.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Para habilitar o LFH ou o recurso terminate-on-corruption, use a função HeapSetInformation .

Windows XP e Windows Server 2003: Uma lista de look-aside é um mecanismo de alocação de memória rápida que contém apenas blocos de tamanho fixo. As listas de look-aside são habilitadas por padrão para heaps que dão suporte a elas. A partir do Windows Vista, as listas de look-aside não são usadas e o LFH está habilitado por padrão.

As listas de look-aside são mais rápidas do que as alocações gerais do pool que variam de tamanho, pois o sistema não pesquisa memória gratuita que se ajusta à alocação. Além disso, o acesso a listas de look-aside geralmente é sincronizado usando instruções rápidas de troca de processador atômica em vez de mutexes ou spinlocks. Listas de look-aside podem ser criadas pelo sistema ou drivers. Eles podem ser alocados do pool paginado ou nãopagado.

Exemplos

O exemplo a seguir usa GetProcessHeap para obter um identificador para o heap de processo padrão e HeapQueryInformation para recuperar informações sobre o heap.

#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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho heapapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

GetProcessHeap

Funções heap

Heapcreate

HeapSetInformation

Funções de gerenciamento da memória