CWin32Heap-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse implementeert IAtlMemMgr met behulp van de Win32 heap-toewijzingsfuncties.

Belangrijk

Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Syntaxis

class CWin32Heap : public IAtlMemMgr

Leden

Openbare constructors

Naam Description
CWin32Heap::CWin32Heap De constructor.
CWin32Heap::~CWin32Heap De destructor.

Openbare methoden

Naam Description
CWin32Heap::Toewijzen Wijst een blok geheugen toe vanuit het heap-object.
CWin32Heap::Attach Koppelt het heap-object aan een bestaande heap.
CWin32Heap::D etach Het heap-object loskoppelen van een bestaande heap.
CWin32Heap::Free Hiermee wordt geheugen vrijgemaakt dat eerder is toegewezen vanuit de heap.
CWin32Heap::GetSize Retourneert de grootte van een geheugenblok dat is toegewezen vanuit het heap-object.
CWin32Heap::Reallocate Hiermee wordt een blok geheugen van het heap-object opnieuw verplaatst.

Publieke dataleden

Naam Description
CWin32Heap::m_bOwnHeap Een vlag die wordt gebruikt om het huidige eigendom van de heap-ingang te bepalen.
CWin32Heap::m_hHeap Greep naar het heap-object.

Opmerkingen

CWin32Heap implementeert geheugentoewijzingsmethoden met behulp van de Win32 heap-toewijzingsfuncties, waaronder HeapAlloc en HeapFree. In tegenstelling tot andere Heap-klassen moet CWin32Heap een geldige heap-ingang worden opgegeven voordat geheugen wordt toegewezen: de andere klassen gebruiken standaard de proces-heap. De greep kan worden geleverd aan de constructor of aan de CWin32Heap::Attach-methode . Zie de methode CWin32Heap::CWin32Heap voor meer informatie.

Example

Zie het voorbeeld voor IAtlMemMgr.

Overnamehiërarchie

IAtlMemMgr

CWin32Heap

Requirements

Koptekst: atlmem.h

CWin32Heap::Toewijzen

Wijst een blok geheugen toe vanuit het heap-object.

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

Parameterwaarden

nBytes
Het aangevraagde aantal bytes in het nieuwe geheugenblok.

Retourwaarde

Hiermee wordt een aanwijzer geretourneerd naar het zojuist toegewezen geheugenblok.

Opmerkingen

Roep CWin32Heap::Free of CWin32Heap::Reallocate aan om het geheugen vrij te maken dat door deze methode is toegewezen.

Geïmplementeerd met Behulp van HeapAlloc.

CWin32Heap::Attach

Koppelt het heap-object aan een bestaande heap.

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

Parameterwaarden

hHeap
Een bestaande heaphandgreep.

bTakeOwnership
Een vlag die aangeeft of het CWin32Heap object eigenaar moet worden van de resources van de heap.

Opmerkingen

Als bTakeOwnership TRUE is, is het object verantwoordelijk voor het CWin32Heap verwijderen van de heapgreep.

CWin32Heap::CWin32Heap

De constructor.

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

Parameterwaarden

hHeap
Een bestaand heap-object.

dwFlags
Vlaggen die worden gebruikt bij het maken van de heap.

nInitialSize
De oorspronkelijke grootte van de heap.

nMaxSize
De maximale grootte van de heap.

Opmerkingen

Voordat u geheugen toegeeft, moet u het CWin32Heap object voorzien van een geldige heapgreep. De eenvoudigste manier om dit te bereiken is door het proces heap te gebruiken:

CWin32Heap MyHeap(GetProcessHeap());   

Het is ook mogelijk om een bestaande heapgreep aan de constructor te leveren, in welk geval het nieuwe object niet het eigendom van de heap overneemt. De oorspronkelijke heapgreep is nog steeds geldig wanneer het CWin32Heap object wordt verwijderd.

Een bestaande heap kan ook worden gekoppeld aan het nieuwe object met behulp van CWin32Heap::Attach.

Als een heap is vereist wanneer bewerkingen allemaal worden uitgevoerd vanuit één thread, kunt u het object het beste als volgt maken:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

De parameter HEAP_NO_SERIALIZE geeft aan dat wederzijdse uitsluiting niet wordt gebruikt wanneer de heap-functies toewijzen en vrij geheugen, met een toename van de prestaties.

De derde parameter wordt standaard ingesteld op 0, waardoor de heap naar behoefte kan groeien. Zie HeapCreate voor een uitleg van de geheugengrootten en vlaggen.

CWin32Heap::~CWin32Heap

De destructor.

~CWin32Heap() throw();

Opmerkingen

Vernietigt de heapgreep als het CWin32Heap object eigenaar is van de heap.

CWin32Heap::D etach

Het heap-object loskoppelen van een bestaande heap.

HANDLE Detach() throw();

Retourwaarde

Retourneert de greep naar de heap waaraan het object eerder is gekoppeld.

CWin32Heap::Free

Geheugen vrij dat eerder is toegewezen vanuit de heap door CWin32Heap::Toewijzen of CWin32Heap::Reallocate.

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

Parameterwaarden

p
Wijs het geheugenblok aan om vrij te maken. NULL is een geldige waarde en doet niets.

CWin32Heap::GetSize

Retourneert de grootte van een geheugenblok dat is toegewezen vanuit het heap-object.

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

Parameterwaarden

p
Wijs het geheugenblok aan waarvan de grootte van de methode wordt verkregen. Dit is een aanwijzer die wordt geretourneerd door CWin32Heap::Toewijzen of CWin32Heap::Reallocate.

Retourwaarde

Retourneert de grootte in bytes van het toegewezen geheugenblok.

CWin32Heap::m_bOwnHeap

Een vlag die wordt gebruikt om het huidige eigendom van de heap-ingang te bepalen die is opgeslagen in m_hHeap.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Greep naar het heap-object.

HANDLE m_hHeap;

Opmerkingen

Een variabele die wordt gebruikt om een ingang op te slaan in het heap-object.

CWin32Heap::Reallocate

Hiermee wordt een blok geheugen van het heap-object opnieuw verplaatst.

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

Parameterwaarden

p
Wijs het geheugenblok aan om opnieuw te kunnen toewijzen.

nBytes
De nieuwe grootte in bytes van het toegewezen blok. Het blok kan groter of kleiner worden gemaakt.

Retourwaarde

Hiermee wordt een aanwijzer geretourneerd naar het zojuist toegewezen geheugenblok.

Opmerkingen

Als p NULL is, wordt ervan uitgegaan dat het geheugenblok nog niet is toegewezen en CWin32Heap::Toewijzing wordt aangeroepen, met een argument van nBytes.

Zie ook

Overzicht van klassen
IAtlMemMgr-klasse
CLocalHeap-klasse
CGlobalHeap-klasse
CCRTHeap-klasse
CComHeap-klasse