CWin32Heap 类

此类使用 Win32 堆分配函数实现 IAtlMemMgr

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

class CWin32Heap : public IAtlMemMgr

成员

公共构造函数

名称 描述
CWin32Heap::CWin32Heap 构造函数。
CWin32Heap::~CWin32Heap 析构函数。

公共方法

名称 描述
CWin32Heap::Allocate 从堆对象中分配内存块。
CWin32Heap::Attach 将堆对象附加到现有堆。
CWin32Heap::Detach 将堆对象与现有堆分离。
CWin32Heap::Free 释放之前从堆中分配的内存。
CWin32Heap::GetSize 返回从堆中分配的内存块的大小。
CWin32Heap::Reallocate 从堆对象中重新分配内存块。

公共数据成员

“属性” 描述
CWin32Heap::m_bOwnHeap 用于确定堆句柄当前所有权的标志。
CWin32Heap::m_hHeap 堆对象的句柄。

备注

CWin32Heap 使用 Win32 堆分配函数(包括 HeapAllocHeapFree)实现内存分配方法。 与其他堆类不同,CWin32Heap 在分配内存之前需要提供有效的堆句柄:其他类默认使用进程堆。 可以为构造函数或 CWin32Heap::Attach 方法提供该句柄。 有关详细信息,请参阅 CWin32Heap::CWin32Heap 方法。

示例

请参阅 IAtlMemMgr 的示例。

继承层次结构

IAtlMemMgr

CWin32Heap

要求

标头:atlmem.h

CWin32Heap::Allocate

从堆对象中分配内存块。

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

参数

nBytes
新内存块中请求的字节数。

返回值

将指针返回到新分配的内存块。

备注

调用 CWin32Heap::FreeCWin32Heap::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::Detach

将堆对象与现有堆分离。

HANDLE Detach() throw();

返回值

返回之前附加对象的堆的句柄。

CWin32Heap::Free

释放以前由 CWin32Heap::AllocateCWin32Heap::Reallocate 从堆分配的内存。

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

参数

p
指向要重新释放的内存块的指针。 NULL 是有效值,不执行任何操作。

CWin32Heap::GetSize

返回从堆中分配的内存块的大小。

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

参数

p
指向该方法将获取其大小的内存块的指针。 这是 CWin32Heap::AllocateCWin32Heap::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,则假定尚未分配内存块,并且使用 nBytes 自变量调用了 CWin32Heap::Allocate

另请参阅

类概述
IAtlMemMgr 类
CLocalHeap 类
CGlobalHeap 类
CCRTHeap 类
CComHeap 类