Freigeben über


CWin32Heap-Klasse

Diese Klasse implementiert IAtlMemMgr mithilfe der Win32-Heap-Zuordnungsfunktionen.

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.

Syntax

class CWin32Heap : public IAtlMemMgr

Member

Öffentliche Konstruktoren

Name Beschreibung
CWin32Heap::CWin32Heap Der Konstruktor.
CWin32Heap::~CWin32Heap Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CWin32Heap::Assigned Führt eine Belegung eines Speicherblocks vom Heapobjekt durch.
CWin32Heap::Attach Fügt das Heap-Objekt an einen vorhandenen Heap an.
CWin32Heap::D etach Trennt das Heap-Objekt von einem vorhandenen Heap.
CWin32Heap::Free Gibt Speicher frei, der zuvor vom Heap zugewiesen wurde.
CWin32Heap::GetSize Gibt die Größe eines Speicherblocks zurück, der dem Heap-Objekt zugeordnet ist.
CWin32Heap::Reallocate Führt eine Neubelegung eines Speicherblocks vom Heapobjekt durch.

Öffentliche Datenmember

Name Beschreibung
CWin32Heap::m_bOwnHeap Ein Flag, das verwendet wird, um den aktuellen Besitz des Heap-Handles zu ermitteln.
CWin32Heap::m_hHeap Behandeln des Heap-Objekts.

Hinweise

CWin32Heap implementiert Speicherzuordnungsmethoden mithilfe der Win32-Heap-Zuordnungsfunktionen, einschließlich HeapAlloc und HeapFree. Im Gegensatz zu anderen Heap-Klassen muss ein gültiges Heap-Handle bereitgestellt werden, CWin32Heap bevor Arbeitsspeicher zugewiesen wird: Die anderen Klassen verwenden standardmäßig den Prozess-Heap. Der Handle kann dem Konstruktor oder der CWin32Heap::Attach-Methode bereitgestellt werden. Weitere Informationen finden Sie in der CWin32Heap::CWin32Heap-Methode .

Beispiel

Sehen Sie sich das Beispiel für IAtlMemMgr an.

Vererbungshierarchie

IAtlMemMgr

CWin32Heap

Anforderungen

Kopfzeile: atlmem.h

CWin32Heap::Assigned

Führt eine Belegung eines Speicherblocks vom Heapobjekt durch.

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

Parameter

nBytes
Die angeforderte Anzahl von Bytes im neuen Speicherblock.

Rückgabewert

Gibt einen Zeiger auf den neu belegten Speicherblock zurück.

Hinweise

Rufen Sie CWin32Heap::Free oder CWin32Heap::Reallocate auf, um den von dieser Methode zugewiesenen Speicher freizugeben.

Implementiert mit HeapAlloc.

CWin32Heap::Attach

Fügt das Heap-Objekt an einen vorhandenen Heap an.

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

Parameter

hHeap
Ein vorhandenes Heap-Handle.

bTakeOwnership
Ein Flag, das angibt, ob das CWin32Heap Objekt die Besitzer der Ressourcen des Heaps übernehmen soll.

Hinweise

Wenn bTakeOwnership WAHR ist, ist das CWin32Heap Objekt für das Löschen des Heap-Handles verantwortlich.

CWin32Heap::CWin32Heap

Der Konstruktor.

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

Parameter

hHeap
Ein vorhandenes Heapobjekt.

dwFlags
Bei der Erstellung des Heaps verwendete Flags.

nInitialSize
Die Anfangsgröße des Heaps.

nMaxSize
Die maximale Größe des Heaps.

Hinweise

Vor dem Zuordnen von Speicher muss das CWin32Heap-Objekt mit einem gültigen Heaphandle bereitgestellt werden. Das geht am einfachsten mit dem Prozessheap:

CWin32Heap MyHeap(GetProcessHeap());   

Es ist auch möglich, ein vorhandenes Heaphandle an den Konstruktor auszugeben; in diesem Fall übernimmt das neue Objekt nicht Besitz des Heaps. Wenn das CWin32Heap-Objekt gelöscht wird, ist das ursprüngliche Heaphandle weiterhin gültig.

Ein vorhandener Heap kann auch mit CWin32Heap::Attach an das neue Objekt angefügt werden.

Wenn ein Heap erforderlich ist, in dem alle Operationen von einem einzigen Thread ausgeführt werden, empfiehlt es sich, das Objekt folgendermaßen zu erstellen:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

Der Parameter HEAP_NO_SERIALIZE gibt an, dass der gegenseitige Ausschluss nicht verwendet wird, wenn die Heap-Funktionen Arbeitsspeicher zuordnen und freigeben, wobei die Leistung entsprechend erhöht wird.

Der dritte Parameter beträgt standardmäßig 0; dadurch kann das Heap nach Bedarf vergrößert werden. Eine Erläuterung der Speichergrößen und Flags finden Sie unter HeapCreate .

CWin32Heap::~CWin32Heap

Der Destruktor.

~CWin32Heap() throw();

Hinweise

Zerstört den Heap-Handle, wenn das CWin32Heap Objekt über den Besitz des Heaps verfügt.

CWin32Heap::D etach

Trennt das Heap-Objekt von einem vorhandenen Heap.

HANDLE Detach() throw();

Rückgabewert

Gibt das Handle an den Heap zurück, an den das Objekt zuvor angefügt wurde.

CWin32Heap::Free

Gibt Speicher frei, der zuvor vom Heap von CWin32Heap::Assigned oder CWin32Heap::Reallocate zugewiesen wurde.

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

Parameter

p
Zeigen Sie auf den Speicherblock, um freizugeben. NULL ist ein gültiger Wert und führt nichts aus.

CWin32Heap::GetSize

Gibt die Größe eines Speicherblocks zurück, der dem Heap-Objekt zugeordnet ist.

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

Parameter

p
Zeigen Sie auf den Speicherblock, dessen Größe die Methode abruft. Dies ist ein Zeiger, der von CWin32Heap::Assigned oder CWin32Heap::Reallocate zurückgegeben wird.

Rückgabewert

Gibt die Größe des zugeordneten Speicherblocks in Bytes zurück.

CWin32Heap::m_bOwnHeap

Ein Flag, das verwendet wird, um den aktuellen Besitz des in m_hHeap gespeicherten Heap-Handles zu ermitteln.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Behandeln des Heap-Objekts.

HANDLE m_hHeap;

Hinweise

Eine Variable, die zum Speichern eines Handles für das Heap-Objekt verwendet wird.

CWin32Heap::Reallocate

Führt eine Neubelegung eines Speicherblocks vom Heapobjekt durch.

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

Parameter

p
Zeiger auf den neu zu belegenden Speicherblock.

nBytes
Die neue Größe des belegten Blocks in Bytes. Der Block kann größer oder kleiner gemacht werden.

Rückgabewert

Gibt einen Zeiger auf den neu belegten Speicherblock zurück.

Hinweise

Wenn p NULL ist, wird davon ausgegangen, dass der Speicherblock noch nicht zugewiesen wurde und CWin32Heap::Assigned aufgerufen wird, mit einem Argument von nBytes.

Siehe auch

Klassenübersicht
IAtlMemMgr-Klasse
CLocalHeap-Klasse
CGlobalHeap-Klasse
CComHeap-Klasse
CComHeap-Klasse