Sdílet prostřednictvím


CWin32Heap – třída

Tato třída implementuje IAtlMemMgr pomocí funkcí přidělení haldy Win32.

Důležité

Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.

Syntaxe

class CWin32Heap : public IAtlMemMgr

Členové

Veřejné konstruktory

Název Popis
CWin32Heap::CWin32Heap Konstruktor
CWin32Heap::~CWin32Heap Destruktor.

Veřejné metody

Název Popis
CWin32Heap::Přidělení Přidělí blok paměti z objektu haldy.
CWin32Heap::Attach Připojí objekt haldy k existující haldě.
CWin32Heap::D etach Odpojte objekt haldy od existující haldy.
CWin32Heap::Free Uvolní paměť dříve přidělenou z haldy.
CWin32Heap::GetSize Vrátí velikost bloku paměti přiděleného z objektu haldy.
CWin32Heap::Reallocate Relokuje blok paměti z objektu haldy.

Veřejné datové členy

Název Popis
CWin32Heap::m_bOwnHeap Příznak sloužící k určení aktuálního vlastnictví popisovače haldy.
CWin32Heap::m_hHeap Popisovač objektu haldy

Poznámky

CWin32Heap implementuje metody přidělování paměti pomocí funkcí přidělení haldy Win32, včetně HeapAlloc a HeapFree. Na rozdíl od ostatních tříd haldy vyžaduje, CWin32Heap aby byl před přidělením paměti poskytnut platný popisovač haldy: ostatní třídy jsou výchozí pro použití haldy procesu. Popisovač lze zadat konstruktoru nebo CWin32Heap ::Attach metoda. Další podrobnosti najdete v metodě CWin32Heap::CWin32Heap .

Příklad

Podívejte se na příklad pro IAtlMemMgr.

Hierarchie dědičnosti

IAtlMemMgr

CWin32Heap

Požadavky

Hlavička: atlmem.h

CWin32Heap::Přidělení

Přidělí blok paměti z objektu haldy.

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

Parametry

nBajty
Požadovaný počet bajtů v novém bloku paměti.

Návratová hodnota

Vrátí ukazatel na nově přidělený blok paměti.

Poznámky

Volání CWin32Heap::Free nebo CWin32Heap::Reallocate uvolnit paměť přidělenou touto metodou.

Implementováno pomocí HeapAlloc.

CWin32Heap::Attach

Připojí objekt haldy k existující haldě.

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

Parametry

hHeap
Existující úchyt haldy.

bTakeOwnership
Příznak označující, jestli CWin32Heap má objekt převzít vlastnictví prostředků haldy.

Poznámky

Pokud bTakeOwnership je TRUE, CWin32Heap objekt je zodpovědný za odstranění popisovače haldy.

CWin32Heap::CWin32Heap

Konstruktor

CWin32Heap() throw();
CWin32Heap( HANDLE  hHeap) throw();
CWin32Heap(
    DWORD  dwFlags,
    size_t nInitialSize,
    size_t nMaxSize = 0);

Parametry

hHeap
Existující objekt haldy

dwFlags
Příznaky použité při vytváření haldy

nInitialSize
Počáteční velikost haldy

nMaxSize
Maximální velikost haldy

Poznámky

Před přidělením paměti je nutné poskytnout CWin32Heap objekt platným popisovačem haldy. Nejsnáze toho dosáhnete pomocí haldy procesu:

CWin32Heap MyHeap(GetProcessHeap());   

Je také možné zadat do konstruktoru existující popisovač haldy; v tomto případě nový objekt nepřevezme vlastnictví haldy. Původní popisovač haldy bude při odstranění objektu CWin32Heap stále platný.

Existující haldu lze také připojit k novému objektu pomocí CWin32Heap::Attach.

Pokud se halda vyžaduje tam, kde se všechny operace provádějí z jednoho vlákna, je nejlepší vytvořit tento objekt takto:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

Parametr HEAP_NO_SERIALIZE určuje, že vzájemné vyloučení se nepoužije, když funkce haldy přidělují a uvolní paměť s odpovídajícím zvýšením výkonu.

Třetí parametr má výchozí hodnotu 0, což umožňuje, aby halda narůstala podle potřeby. Vysvětlení velikostí paměti a příznaků najdete v tématu HeapCreate .

CWin32Heap::~CWin32Heap

Destruktor.

~CWin32Heap() throw();

Poznámky

Zničí úchyt haldy, pokud CWin32Heap má objekt vlastnictví haldy.

CWin32Heap::D etach

Odpojte objekt haldy od existující haldy.

HANDLE Detach() throw();

Návratová hodnota

Vrátí popisovač haldy, ke které byl objekt dříve připojen.

CWin32Heap::Free

Uvolní paměť dříve přidělenou z haldy CWin32Heap ::Allocate nebo CWin32Heap::Reallocate.

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

Parametry

p
Ukazatel na blok paměti na uvolnění. NULL je platná hodnota a nic nedělá.

CWin32Heap::GetSize

Vrátí velikost bloku paměti přiděleného z objektu haldy.

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

Parametry

p
Ukazatel na blok paměti, jehož velikost metoda získá. Jedná se o ukazatel vrácený CWin32Heap::Allocate nebo CWin32Heap::Reallocate.

Návratová hodnota

Vrátí velikost přiděleného bloku paměti v bajtech.

CWin32Heap::m_bOwnHeap

Příznak použitý k určení aktuálního vlastnictví popisovače haldy uložené v m_hHeap.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Popisovač objektu haldy

HANDLE m_hHeap;

Poznámky

Proměnná použitá k uložení popisovače do objektu haldy.

CWin32Heap::Reallocate

Relokuje blok paměti z objektu haldy.

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

Parametry

p
Ukazatel na blok paměti k opětovnému přidělení.

nBajty
Nová velikost v bajtech přiděleného bloku. Blok může být větší nebo menší.

Návratová hodnota

Vrátí ukazatel na nově přidělený blok paměti.

Poznámky

Pokud p je NULL, předpokládá se, že blok paměti ještě nebyl přidělen a CWin32Heap::Allocate je volána s argumentem nBytes.

Viz také

Přehled třídy
IAtlMemMgr – třída
CLocalHeap – třída
CGlobalHeap – třída
CCRTHeap – třída
CComHeap – třída