Класс 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