Clase CWin32Heap
Esta clase implementa IAtlMemMgr mediante las funciones de asignación del montón Win32.
Importante
Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Sintaxis
class CWin32Heap : public IAtlMemMgr
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CWin32Heap::CWin32Heap | Constructor . |
CWin32Heap::~CWin32Heap | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CWin32Heap::Allocate | Asigna un bloque de memoria del objeto de montón. |
CWin32Heap::Attach | Adjunta el objeto de montón a un montón existente. |
CWin32Heap::Detach | Desasocia el objeto de montón de un montón existente. |
CWin32Heap::Free | Libera memoria previamente asignada del montón. |
CWin32Heap::GetSize | Devuelve el tamaño de un bloque de memoria asignado de un objeto de montón. |
CWin32Heap::Reallocate | Reasigna un bloque de memoria del objeto de montón. |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CWin32Heap::m_bOwnHeap | Marca que se usa para determinar la propiedad actual del manipulador del montón. |
CWin32Heap::m_hHeap | Manipulador del objeto de montón. |
Comentarios
CWin32Heap
implementa métodos de asignación de memoria mediante las funciones de asignación de montón de Win32, como HeapAlloc y HeapFree. A diferencia de otras clases de Montón, CWin32Heap
requiere que se proporcione un manipulador de montón válido antes de asignar memoria: las demás clases usan el montón de procesos de forma predeterminada. El manipulador se puede proporcionar al constructor o al método CWin32Heap::Attach. Consulte el método CWin32Heap::CWin32Heap para más detalles.
Ejemplo
Vea el ejemplo de IAtlMemMgr.
Jerarquía de herencia
IAtlMemMgr
CWin32Heap
Requisitos
Encabezado: atlmem.h
CWin32Heap::Allocate
Asigna un bloque de memoria del objeto de montón.
virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();
Parámetros
nBytes
Número de bytes solicitado en el nuevo bloque de memoria.
Valor devuelto
Devuelve un puntero al bloque de memoria recién asignado.
Comentarios
Realice una llamada a CWin32Heap::Free o CWin32Heap::Reallocate para liberar la memoria asignada por este método.
Se implementa mediante HeapAlloc.
CWin32Heap::Attach
Adjunta el objeto de montón a un montón existente.
void Attach(HANDLE hHeap, bool bTakeOwnership) throw();
Parámetros
hHeap
Manipulador de montón existente.
bTakeOwnership
Marca que indica si el objeto CWin32Heap
va a tomar control de los recursos del montón.
Comentarios
Si bTakeOwnership es TRUE, el objeto CWin32Heap
es responsable de eliminar el manipulador del montón.
CWin32Heap::CWin32Heap
Constructor .
CWin32Heap() throw();
CWin32Heap( HANDLE hHeap) throw();
CWin32Heap(
DWORD dwFlags,
size_t nInitialSize,
size_t nMaxSize = 0);
Parámetros
hHeap
Objeto de montón existente.
dwFlags
Marcas utilizadas en la creación del montón.
nInitialSize
Tamaño inicial del montón.
nMaxSize
Tamaño máximo del montón.
Comentarios
Antes de asignar memoria, es necesario proporcionar el objeto CWin32Heap
con un identificador de montón válido. El modo más sencillo de hacerlo es usar el montón de procesos:
CWin32Heap MyHeap(GetProcessHeap());
También se puede proporcionar un identificador de montón existente al constructor, en cuyo caso el nuevo objeto no asumirá la propiedad del montón. El identificador del montón original seguirá siendo válido cuando se elimine el objeto CWin32Heap
.
También se puede asociar un montón existente con el objeto nuevo mediante CWin32Heap::Attach.
Si se necesita un montón en las operaciones que se realizan en un único subproceso, la mejor manera de hacerlo es crear el objeto del modo siguiente:
CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);
El parámetro HEAP_NO_SERIALIZE especifica que no se usará la exclusión mutua cuando las funciones del montón asignen y liberen memoria, con un aumento según el rendimiento.
El tercer parámetro se establece en 0 de forma predeterminada, lo que permite al montón crecer según sea necesario. Vea HeapCreate para una explicación de los tamaños de memoria y las marcas.
CWin32Heap::~CWin32Heap
El destructor .
~CWin32Heap() throw();
Comentarios
Destruye el manipulador del montón si el objeto CWin32Heap
tiene la propiedad del montón.
CWin32Heap::Detach
Desasocia el objeto de montón de un montón existente.
HANDLE Detach() throw();
Valor devuelto
Devuelve el manipulador al montón al que se adjuntó previamente el objeto.
CWin32Heap::Free
Libera memoria asignada previamente desde el montón por CWin32Heap::Allocate o CWin32Heap::Reallocate.
virtual void Free(void* p) throw();
Parámetros
p
Puntero al bloque de memoria que se va a liberar. NULL es un valor válido y no hace nada.
CWin32Heap::GetSize
Devuelve el tamaño de un bloque de memoria asignado de un objeto de montón.
virtual size_t GetSize(void* p) throw();
Parámetros
p
Puntero al bloque de memoria del que obtendrá su tamaño el método. Se trata de un puntero devuelto por CWin32Heap::Allocate o CWin32Heap::Reallocate.
Valor devuelto
Devuelve el tamaño, en bytes, del bloque de memoria asignado.
CWin32Heap::m_bOwnHeap
Marca que se usa para determinar la propiedad actual del manipulador del montón que se almacena en m_hHeap.
bool m_bOwnHeap;
CWin32Heap::m_hHeap
Manipulador del objeto de montón.
HANDLE m_hHeap;
Comentarios
Variable usada para almacenar un manipulador en el objeto de montón.
CWin32Heap::Reallocate
Reasigna un bloque de memoria del objeto de montón.
virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();
Parámetros
p
Puntero al bloque de memoria que se va a reasignar.
nBytes
Nuevo tamaño en bytes del bloque asignado. El bloque se puede hacer mayor o menor.
Valor devuelto
Devuelve un puntero al bloque de memoria recién asignado.
Comentarios
Si p es NULL, se supone que el bloque de memoria no se ha asignado todavía y se llama a CWin32Heap::Allocate con un argumento de nBytes.
Consulte también
Información general sobre la clase
IAtlMemMgr (clase)
CLocalHeap (clase)
CGlobalHeap (clase)
CCRTHeap (clase)
CComHeap (clase)