Compartilhar via


Função HeapSize (heapapi.h)

Recupera o tamanho de um bloco de memória alocado de um heap pela função HeapAlloc ou HeapReAlloc .

Sintaxe

SIZE_T HeapSize(
  [in] HANDLE  hHeap,
  [in] DWORD   dwFlags,
  [in] LPCVOID lpMem
);

Parâmetros

[in] hHeap

Um identificador para o heap no qual o bloco de memória reside. Esse identificador é retornado pela função HeapCreate ou GetProcessHeap .

[in] dwFlags

As opções de tamanho de heap. Especificar o valor a seguir substitui o valor correspondente especificado no parâmetro flOptions quando o heap foi criado usando a função HeapCreate .

Valor Significado
HEAP_NO_SERIALIZE
0x00000001
O acesso serializado não será usado. Para obter mais informações, consulte Comentários.

Para garantir que o acesso serializado esteja desabilitado para todas as chamadas para essa função, especifique HEAP_NO_SERIALIZE na chamada para HeapCreate. Nesse caso, não é necessário especificar adicionalmente HEAP_NO_SERIALIZE nessa chamada de função.

Esse valor não deve ser especificado ao acessar o heap de processo. O sistema pode criar threads adicionais dentro do processo do aplicativo, como um manipulador CTRL+C, que acessam simultaneamente o heap de processo.

[in] lpMem

Um ponteiro para o bloco de memória cujo tamanho a função obterá. Esse é um ponteiro retornado pela função HeapAlloc ou HeapReAlloc . O bloco de memória deve ser do heap especificado pelo parâmetro hHeap .

Retornar valor

Se a função for bem-sucedida, o valor retornado será o tamanho solicitado do bloco de memória alocado, em bytes.

Se a função falhar, o valor retornado será (SIZE_T)-1. A função não chama SetLastError. Um aplicativo não pode chamar GetLastError para obter informações de erro estendidas.

Se o parâmetro lpMem se referir a uma alocação de heap que não está no heap especificado pelo parâmetro hHeap , o comportamento da função HeapSize será indefinido.

Comentários

A serialização garante a exclusão mútua quando dois ou mais threads tentam alocar simultaneamente ou liberar blocos do mesmo heap. Há um pequeno custo de desempenho para serialização, mas ele deve ser usado sempre que vários threads alocam e liberam memória do mesmo heap. Definir o valor HEAP_NO_SERIALIZE elimina a exclusão mútua no heap. Sem serialização, dois ou mais threads que usam o mesmo identificador de heap podem tentar alocar ou liberar memória simultaneamente, provavelmente causando corrupção no heap. O valor HEAP_NO_SERIALIZE pode, portanto, ser usado com segurança apenas nas seguintes situações:

  • O processo tem apenas um thread.
  • O processo tem vários threads, mas apenas um thread chama as funções de heap para um heap específico.
  • O processo tem vários threads e o aplicativo fornece seu próprio mecanismo para exclusão mútua a um heap específico.

Requisitos

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

Confira também

Funções heap

Heapalloc

Heaprealloc

Funções de gerenciamento da memória

APIs Vertdll disponíveis em enclaves de VBS