HeapAlloc
9/8/2008
Essa função aloca um bloco de memória de um heap. A memória alocada não é móvel.
Syntax
LPVOID HeapAlloc(
HANDLE hHeap,
DWORD dwFlags,
DWORD dwBytes
);
Parameters
hHeap
[no] Identificador para o heap da qual a memória será alocada.Este parâmetro é um identificador retornado pela função HeapCreate GetProcessHeap ou.
dwFlags
[no] Opções alocação da pilha. Especificar qualquer um desses sinalizadores irá substituir o correspondente sinalizador especificado quando o heap foi criado com HeapCreate.A seguinte tabela mostra os sinalizadores você pode especificar. Você pode especificar um ou mais desses sinalizadores.
Valor Descrição HEAP_NO_SERIALIZE
É ignorado. O heap é sempre serializado.
HEAP_ZERO_MEMORY
Especifica que a memória alocada será inicializada para zero. Caso contrário, a memória não está inicializada para zero.
dwBytes
[no] Número de bytes a ser alocada.Se o heap especificado pela hHeap parâmetro é um heap nongrowable, dwBytes deve ser menor que 0x7FFF8.
Você cria um heap nongrowable chamado de HeapCreate função com um diferente de zero valor.
Return Value
Um ponteiro para bloco de memória alocada indica sucesso. Ponteiros retornados por HeapAlloc e são HeapReAlloc válido ponteiros até que eles são liberados pelo HeapFree.
NULL Indica falha. Se a função falhar, ele não chamar SetLastError.
Remarks
Se HeapAlloc for bem-sucedido, ele menos aloca o quantidade de memória solicitada. Se a quantidade alocada for maior do que a quantidade solicitada, o processo poderá usar a quantidade inteira. Para determinar o real tamanho de bloco alocado, use a função HeapSize.
Para um bloco de memória alocados pelo livre HeapAlloc, use a função HeapFree.
Memória alocada por HeapAlloc Não é móvel. Como a memória não é móvel, o heap pode ficar fragmentado.
Garante a serialização de exclusão mútua quando dois ou mais segmentos tentar alocar simultaneamente ou livre bloqueia a partir de heap mesmo. Há um custo desempenho pequeno, mas ele deve ser usado sempre que múltiplo alocar segmentos e livre memória a partir de heap mesmo.
Um crítico seção sempre é usada para acessar serializar para um individual heap. Há um crítico seção por heap para proteger acessar para cada heap.
Tentar pegar um crítico seção que não seja pertencente é uma operação caminho rápido que gera pouca sobrecarga. Isso é semelhante a usar o sinalizador HEAP_NO_SERIALIZE se somente um segmento nunca foi acessando um heap específico.
Se houver contenção para o crítico seção e, portanto, o heap, uma nova solicitação segmento alocar espaço heap será serializar.
HeapAlloc(GetProcessHeap(),...) é equivalente a LocalAlloc(...).
Requirements
Header | winbase.h |
Library | coredll.lib |
Windows Embedded CE | Windows CE 1.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
Memory Management Functions
GetProcessHeap
HeapCreate
HeapDestroy
HeapFree
HeapReAlloc
HeapSize