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