Compartilhar via


HeapCreate

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa função reserva memória da área de memória compartilhada. Em seguida, use HeapAlloc para alocar memória a partir de memória reservada.

Syntax

HANDLE HeapCreate(
  DWORD flOptions,
  DWORD dwInitialSize,
  DWORD dwMaximumSize
);

Parameters

  • flOptions
    [no] Atributos opcionais para o novo heap.

    Esses sinalizadores afetam acessar subseqüente para o novo heap através de chamadas para a (funções heapHeapAlloc, HeapFree, HeapReAlloc, and HeapSize).

    A seguinte tabela mostra os valores possíveis.

    Valor Descrição

    HEAP_NO_SERIALIZE

    Este sinalizador será ignorado.

    HEAP_SHARED_READONLY

    Especifica que pilhas criadas com este sinalizador será legível por outros processos e somente gravável, o processo que criou o heap.

    Observação

    Executando no modo kernel é exigido em ordem para criar ou usar um heap com o sinalizador HEAP_SHARED_READONLY e essa proteção heap compartilhada só se aplica aos segmentos que não estão no modo kernel.

    Se o chamador não for de confiança, a falha chamar com o código de erro ERROR_ACCESS_DENIED.

    HEAP_SHARED_READONLY

    Especifica que pilhas criadas com este sinalizador será legível por outros processos e somente gravável, o processo que criou o heap.

    Observação

    Executando no modo kernel é exigido em ordem para criar ou usar um heap com o sinalizador HEAP_SHARED_READONLY e essa proteção heap compartilhada só se aplica aos segmentos que não estão no modo kernel.

    Se o chamador não é privilegiado, a chamar falhará com o código de erro ERROR_ACCESS_DENIED.

  • dwInitialSize
    [no] Tamanho inicial, em bytes, do heap.

    Esse valor determina a quantidade inicial de físico armazenamento que está alocado para o heap.

    O valor é arredondado up to o próximo limite página.

    Para determinar o tamanho de uma página no computador a hospedar, use a função GetSystemInfo.

  • dwMaximumSize
    [no] Se dwMaximumSize é um diferente de zero valor, ele especifica o tamanho máximo, em bytes, do heap. HeapCreate Arredonda dwMaximumSize up to o próximo limite página e, em seguida, reserva um bloco de que tamanho na espaço de endereço virtual do processo para o heap.

    Se alocação solicitações feitas por HeapAlloc Ou HeapReAlloc excede a quantidade inicial de físico espaço armazenamento especificado por dwInitialSize, o sistema aloca páginas adicionais de físico armazenamento para o heap, up to tamanho máximo do heap.

    Se dwMaximumSize é diferente de zero, não é possível aumentar o heap e uma limitação absoluta surge onde todas as alocações são atendidas dentro de heap especificado, a menos que não haja suficiente espaço livre.

    Se dwMaximumSize for zero, ele especifica que o heap pode crescer e tamanho do heap é limitado apenas pela disponível memória.

    As solicitações para alocar blocos maior do que 0x0018000 bytes não falha automaticamente. O sistema chama VirtualAlloc para obter a memória necessária para esses blocos grandes.

    Configure aplicativos que precisam para alocar memória grandes blocos dwMaximumSize para zero.

Return Value

Um identificador para o heap recém-criado indica sucesso. NULL Indica falha. Para informações de erro estendidas get, chamar GetLastError.

Remarks

O HeapCreate função cria um objeto particular heap da qual a processo de chamada pode alocar blocos memória usando o HeapAlloc função. Essas páginas Criar um bloco na espaço de endereço virtual do processo no qual o heap pode aumentar.

Se as solicitações por HeapAlloc excede o tamanho das páginas confirmadas, páginas adicionais são confirmadas neste espaço reservado, assumindo que a físico armazenamento está disponível.

Todos os segmentos modo kernel podem gravar para o heap e todos os outros segmentos podem ler a partir de heap. Para Windows Embedded CE, se você desejar usar pilhas compartilhadas as if estiverem regular pilhas, seus aplicativos devem ser de confiança. Windows Mobile, para se você desejar usar pilhas compartilhadas as if estiverem regular pilhas, os aplicativos devem ser privilegiados. Memória compartilhada heap reside na área de memória compartilhada, de modo que qualquer módulo possa ler a memória compartilhada heap. Em vez de criar memória compartilhada heap, uma abordagem preferível ao compartilhamento gravável memória entre processos é implementar um Gerenciador heap simples e usá-lo com um nomeado memória mapeados arquivo. Para obter mais informações sobre arquivos memória mapeado, consulte File Mapping Functions.

Você também pode usar CeHeapCreate, que lhe permite usar um personalizado função alocação memória. A função alocação memória podem memória reserva por chamado CreateFileMapping em uma memória mapeados arquivo que não tenha um subjacente arquivo e em seguida, mapa (n.); mapear (v.) uma exibição de todo o mapeamento. A função a memória confirmação pode fazer nada, ou ele pode ler o físico páginas abaixo para que eles são paginados em. A livre função, em seguida, faz nada quando decommitting memória e, em seguida, quando liberar memória, o livre função fecha o mapeamento memória. Para compartilhar essa memória entre processos, configurar um único processo para alocar e livre memória a partir de heap. Todos os processos que compartilhar este chamar memória para esse processo. O processo que gerencia a memória heap usa o nomeado memória mapeados arquivo como um heap e o outro processos aberto a memória mapeado arquivo pelo seu nome e, em seguida, obter um ponteiro para a memória do processo que gerencia a memória heap. Para acessar a memória compartilhada, os processos deve aberto um mapeamento e uma exibição.

Se um dynamic-link library (DLL) cria um heap particular, o heap é criado na espaço de endereço do processo que chamado de DLL e ela é acessível somente a esse processo.

O sistema usa memória a partir de heap particular para armazenar heap suporte estruturas, portanto, não todos tamanho heap especificado está disponível para o processo. De exemplo, se a HeapAlloc função solicitações 64 KB de um heap com um tamanho máximo de 64 KB, a solicitação poderá falhar because of sistema sobrecarga.

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 quando 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.

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
GetSystemInfo
HeapAlloc
HeapCreate
HeapDestroy
HeapFree
HeapReAlloc
HeapSize
VirtualAlloc

Other Resources

File Mapping Functions
Modified Kernel APIs
CeVirtualSharedAlloc
CreateFileMapping