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 retorno
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 alocarem e liberarem memória, com um aumento correspondente 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 retorno
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 retorno
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 retorno
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 aula
Classe IAtlMemMgr
Classe CLocalHeap
Classe CGlobalHeap
Classe de CCRTHeap
Classe CComHeap