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