CWin32Heap 類別
這個類別會使用 Win32 堆積配置函式來實作 IAtlMemMgr 。
重要
這個類別及其成員不能用於在 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 或 CWin32Heap::Reallocate 從堆積配置的記憶體。
virtual void Free(void* p) throw();
參數
p
要釋放之內存區塊的指標。 NULL 是有效的值,且不會執行任何動作。
CWin32Heap::GetSize
傳回從堆積物件配置的記憶體區塊大小。
virtual size_t GetSize(void* p) throw();
參數
p
記憶體區塊的指標,其方法將取得其大小。 這是 CWin32Heap::Allocate 或 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 類別