CWin32Heap Class

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

這個類別會實作IAtlMemMgr使用 Win32 堆積配置函式。

System_CAPS_ICON_important.jpg 重要

這個類別及其成員不能在 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

從堆積物件配置記憶體區塊。

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

參數

nBytes
在新記憶體區塊中要求的位元組數目。

傳回值

傳回新配置記憶體區塊的指標。

備註

呼叫CWin32Heap::FreeCWin32Heap::Reallocate釋放透過這個方法配置的記憶體。

使用實作HeapAlloc

將堆積物件附加至現有的堆積。

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

參數

hHeap
現有的堆積控制代碼。

bTakeOwnership
旗標,指出如果CWin32Heap物件是堆積的資源取得擁有權。

備註

如果bTakeOwnership為 TRUE,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() throw();

備註

終結的堆積控制代碼,如果CWin32Heap物件具有堆積的擁有權。

中斷連結現有的堆積中的堆積物件。

HANDLE Detach() throw();

傳回值

傳回的堆積的物件先前附加的控制代碼。

釋放先前配置的堆積中CWin32Heap::AllocateCWin32Heap::Reallocate

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

參數

p
要釋放的記憶體區塊指標。 NULL 是有效的值,並不執行任何動作。

傳回從堆積的物件配置的記憶體區塊的大小。

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

參數

p
記憶體區塊的方法會取得其大小的指標。 這是所傳回的指標CWin32Heap::AllocateCWin32Heap::Reallocate

傳回值

傳回大小,以位元組為單位配置的記憶體區塊。

旗標,用來判斷目前的擁有權的堆積控制代碼儲存在m_hHeap

bool m_bOwnHeap;

堆積物件控制代碼。

HANDLE m_hHeap;

備註

變數,用來儲存堆積物件的控制代碼。

從堆積物件重新配置記憶體區塊。

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

參數

p
若要重新配置之記憶體區塊的指標。

nBytes
配置之區塊的新大小 (以位元組為單位)。 區塊可以放大或縮小。

傳回值

傳回新配置記憶體區塊的指標。

備註

如果p是 NULL,則會假設尚未配置的記憶體區塊和CWin32Heap::Allocate呼叫時,使用引數nBytes

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

顯示: