Поделиться через


Класс CWin32Heap

Этот класс реализует IAtlMemMgr с помощью функций выделения кучи Win32.

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

class CWin32Heap : public IAtlMemMgr

Участники

Открытые конструкторы

Имя Описание
CWin32Heap::CWin32Heap Конструктор.
CWin32Heap::~CWin32Heap Деструктор

Открытые методы

Имя Описание
CWin32Heap::Allocate Выделяет блок памяти из кучи объекта.
CWin32Heap::Attach Присоединяет объект кучи к существующей куче.
CWin32Heap::D etach Отсоединяет объект кучи от существующей кучы.
CWin32Heap::Free Освобождает память, выделенную ранее из кучи.
CWin32Heap::GetSize Возвращает размер блока памяти, выделенного объектом кучи.
CWin32Heap::Reallocate Повторно выделяет блок памяти из кучи объекта.

Открытые члены данных

Имя Описание
CWin32Heap::m_bOwnHeap Флаг, используемый для определения текущего владения дескриптором кучи.
CWin32Heap::m_hHeap Дескриптор объекта кучи.

Замечания

CWin32Heap реализует методы выделения памяти с помощью функций выделения кучи Win32, включая HeapAlloc и HeapFree. В отличие от других классов кучи, CWin32Heap необходимо предоставить допустимый дескриптор кучи перед выделением памяти: другие классы по умолчанию используют кучу процесса. Дескриптор можно предоставить конструктору или методу CWin32Heap::Attach . Дополнительные сведения см. в методе CWin32Heap::CWin32Heap .

Пример

См. пример для IAtlMemMgr.

Иерархия наследования

IAtlMemMgr

CWin32Heap

Требования

Заголовок: atlmem.h

CWin32Heap::Allocate

Выделяет блок памяти из кучи объекта.

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

Параметры

nBytes
Запрошенное число байтов в новом блоке памяти.

Возвращаемое значение

Возвращает указатель на начало выделенного блока памяти.

Замечания

Вызовите CWin32Heap::Free или CWin32Heap::Reallocate , чтобы освободить память, выделенную этим методом.

Реализовано с помощью HeapAlloc.

CWin32Heap::Attach

Присоединяет объект кучи к существующей куче.

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

Параметры

hHeap
Существующий дескриптор кучы.

bTakeOwnership
Флаг, указывающий, является ли CWin32Heap объект владельцем ресурсов кучи.

Замечания

Если bTakeOwnership имеет значение TRUE, CWin32Heap объект отвечает за удаление дескриптора кучи.

CWin32Heap::CWin32Heap

Конструктор.

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

Параметры

hHeap
Существующий объект кучи.

dwFlags
Флаги, используемые при создании кучи.

nInitialSize
Начальный размер кучи.

nMaxSize
Максимальный размер кучи.

Замечания

Перед выделением памяти необходимо предоставить объект CWin32Heap с действительным дескриптором кучи. Для этого проще всего использовать кучу процесса:

CWin32Heap MyHeap(GetProcessHeap());   

Также можно указать в конструкторе дескриптор существующей кучи; в этом случае новый объект не становится владельцем кучи. После удаления объекта CWin32Heap исходный дескриптор кучи будет по-прежнему действителен.

Существующую кучу также можно подключить к новому объекту с помощью CWin32Heap::Attach.

Если куча требуется в ситуации, когда все операции выполняются из единственного потока, лучше всего создать объект следующим образом:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

Параметр HEAP_NO_SERIALIZE указывает, что взаимное исключение не будет использоваться при выделении и освобождении памяти кучи при увеличении производительности.

Третий параметр по умолчанию равен 0, что обеспечивает рост размера кучи по мере необходимости. Сведения о размерах памяти и флагах см . в разделе HeapCreate .

CWin32Heap::~CWin32Heap

Деструктор

~CWin32Heap() throw();

Замечания

Уничтожает дескриптор кучи, если CWin32Heap объект имеет владение кучей.

CWin32Heap::D etach

Отсоединяет объект кучи от существующей кучы.

HANDLE Detach() throw();

Возвращаемое значение

Возвращает дескриптор кучи, к которой был присоединен объект ранее.

CWin32Heap::Free

Освобождает память, ранее выделенную из кучи CWin32Heap::Allocate or CWin32Heap::Reallocate.

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

Параметры

p
Указатель на блок памяти для освобождения. NULL является допустимым значением и ничего не делает.

CWin32Heap::GetSize

Возвращает размер блока памяти, выделенного объектом кучи.

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

Параметры

p
Указатель на блок памяти, размер которого будет получен методом. Это указатель, возвращаемый CWin32Heap::Allocate or CWin32Heap::Reallocate.

Возвращаемое значение

Возвращает размер выделенного блока памяти в байтах.

CWin32Heap::m_bOwnHeap

Флаг, используемый для определения текущего владения дескриптором кучи, хранящимся в m_hHeap.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Дескриптор объекта кучи.

HANDLE m_hHeap;

Замечания

Переменная, используемая для хранения дескриптора в объект кучи.

CWin32Heap::Reallocate

Повторно выделяет блок памяти из кучи объекта.

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

Параметры

p
Указатель на блок памяти для перераспределения.

nBytes
Новый размер выделенного блока в байтах. Блок можно увеличить или уменьшить.

Возвращаемое значение

Возвращает указатель на начало выделенного блока памяти.

Замечания

Если значение p равно NULL, предполагается, что блок памяти еще не выделен и вызывается CWin32Heap::Allocate с аргументом nBytes.

См. также

Общие сведения о классе
Класс IAtlMemMgr
Класс CLocalHeap
Класс CGlobalHeap
Класс CCRTHeap
Класс CComHeap