Classe CWin32Heap

Essa classe implementa IAtlMemMgr usando as funções de alocação de heap do Win32.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

class CWin32Heap : public IAtlMemMgr

Membros

Construtores públicos

Nome Descrição
CWin32Heap::CWin32Heap O construtor .
CWin32Heap::~CWin32Heap O destruidor.

Métodos públicos

Nome Descrição
CWin32Heap::Allocate Aloca um bloco de memória a partir do objeto heap.
CWin32Heap::Attach Anexa o objeto heap a um heap existente.
CWin32Heap::Detach Desanexa o objeto heap de um heap existente.
CWin32Heap::Free Libera memória anteriormente alocada do heap.
CWin32Heap::GetSize Retorna o tamanho de um bloco de memória alocado do objeto heap.
CWin32Heap::Reallocate Realoca um bloco de memória a partir do objeto heap.

Membros de Dados Públicos

Nome Descrição
CWin32Heap::m_bOwnHeap Um sinalizador usado para determinar a propriedade atual do identificador de heap.
CWin32Heap::m_hHeap Identificador para o objeto heap.

Comentários

CWin32Heap implementa métodos de alocação de memória usando as funções de alocação de heap do Win32, incluindo HeapAlloc e HeapFree. Ao contrário de outras classes heap, CWin32Heap requer que um identificador de heap válido seja fornecido antes que a memória seja alocada: as outras classes assumem o padrão para usar o heap de processo. O identificador pode ser fornecido ao construtor ou ao método CWin32Heap::Attach. Consulte o método CWin32Heap::CWin32Heap para obter mais detalhes.

Exemplo

Consulte o exemplo de IAtlMemMgr.

Hierarquia de herança

IAtlMemMgr

CWin32Heap

Requisitos

Cabeçalho: atlmem.h

CWin32Heap::Allocate

Aloca um bloco de memória a partir do objeto heap.

virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();

Parâmetros

nBytes
O número solicitado de bytes no novo bloco de memória.

Valor de Devolução

Retorna um ponteiro para o bloco de memória recém-alocado.

Comentários

Chame CWin32Heap::Free ou CWin32Heap::Reallocate para liberar a memória alocada por esse método.

Implementado usando HeapAlloc.

CWin32Heap::Attach

Anexa o objeto heap a um heap existente.

void Attach(HANDLE hHeap, bool bTakeOwnership) throw();

Parâmetros

hHeap
Um identificador de heap existente.

bTakeOwnership
Um sinalizador que indica se o objeto CWin32Heap deve assumir a propriedade sobre os recursos do heap.

Comentários

Se bTakeOwnership for TRUE, o objeto CWin32Heap será responsável por excluir o identificador de heap.

CWin32Heap::CWin32Heap

O construtor .

CWin32Heap() throw();
CWin32Heap( HANDLE  hHeap) throw();
CWin32Heap(
    DWORD  dwFlags,
    size_t nInitialSize,
    size_t nMaxSize = 0);

Parâmetros

hHeap
Um objeto existente do heap.

dwFlags
Sinalizadores usados na criação do heap.

nInitialSize
O tamanho inicial do heap.

nMaxSize
O tamanho máximo do heap.

Comentários

Antes de alocar memória, é necessário fornecer o objeto CWin32Heap com um identificador de heap válido. A maneira mais simples de fazer isso é usar o heap de processo:

CWin32Heap MyHeap(GetProcessHeap());   

Também é possível fornecer um identificador de heap existente para o construtor, caso em que o novo objeto não assume a propriedade do heap. O identificador original do heap ainda será válido quando o objeto CWin32Heap for excluído.

Um heap existente também pode ser anexado ao novo objeto, usando CWin32Heap::Attach.

Se um heap for necessário onde todas as operações são executadas de um único thread, o melhor modo é criar o objeto como segue:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

O parâmetro HEAP_NO_SERIALIZE especifica que a exclusão mútua não será usada quando as funções de heap alocam e liberam memória, com um aumento de acordo no desempenho.

O terceiro parâmetro é padronizado como 0, o que permite que o heap aumente conforme necessário. Consulte HeapCreate para obter uma explicação dos tamanhos e sinalizadores de memória.

CWin32Heap::~CWin32Heap

O destruidor.

~CWin32Heap() throw();

Comentários

Destruirá o identificador de heap se o objeto CWin32Heap tiver a propriedade do heap.

CWin32Heap::Detach

Desanexa o objeto heap de um heap existente.

HANDLE Detach() throw();

Valor de Devolução

Retorna o identificador para o heap ao qual o objeto foi anexado anteriormente.

CWin32Heap::Free

Libere a memória alocada anteriormente do heap por CWin32Heap::Allocate ou CWin32Heap::Reallocate.

virtual void Free(void* p) throw();

Parâmetros

p
Ponteiro para o bloco de memória a ser liberado. NULL é um valor válido e não faz nada.

CWin32Heap::GetSize

Retorna o tamanho de um bloco de memória alocado do objeto heap.

virtual size_t GetSize(void* p) throw();

Parâmetros

p
Ponteiro para o bloco de memória cujo tamanho o método obterá. Este é um ponteiro retornado por CWin32Heap::Allocate ou CWin32Heap::Reallocate.

Valor de Devolução

Retorna o tamanho do bloco de memória alocado em bytes.

CWin32Heap::m_bOwnHeap

Um sinalizador usado para determinar a propriedade atual do identificador de heap armazenado em m_hHeap.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Identificador para o objeto heap.

HANDLE m_hHeap;

Comentários

Uma variável usada para armazenar um identificador no objeto heap.

CWin32Heap::Reallocate

Realoca um bloco de memória a partir do objeto heap.

virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();

Parâmetros

p
Ponteiro para o bloco de memória a ser realocado.

nBytes
O novo tamanho, em bytes, do bloco alocado. O bloco pode ser tornado maior ou menor.

Valor de Devolução

Retorna um ponteiro para o bloco de memória recém-alocado.

Comentários

Se p é NULL, supõe-se que o bloco de memória ainda não foi alocado e CWin32Heap::Allocate é chamado, com um argumento de nBytes.

Confira também

Visão geral da classe
Classe IAtlMemMgr
Classe CLocalHeap
Classe CGlobalHeap
Classe de CCRTHeap
Classe CComHeap