Compartir a través de


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)