共用方式為


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 堆積配置函式實作記憶體配置方法,包括 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::D etach

將堆積對象與現有的堆積中斷連結。

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,則會假設記憶體區塊尚未配置,且 呼叫 CWin32Heap::Allocate ,且自變數為 nBytes

另請參閱

類別概觀
IAtlMemMgr 類別
CLocalHeap 類別
CGlobalHeap 類別
CCRTHeap 類別
CComHeap 類別