PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::MemoryHeap Klassenreferenz

Speicherverwaltung in Heaps. Mehr ...

Öffentliche Methoden

 MemoryHeap ()
 Konstruktor. Mehr ...
 
 MemoryHeap (size_t elementsize, size_t startnum, size_t increase, size_t growpercent=30)
 Konstruktor mit Initialisierung. Mehr ...
 
 ~MemoryHeap ()
 Destruktor. Mehr ...
 
void * calloc ()
 Mit 0 initialisierten Speicher anfordern. Mehr ...
 
size_t capacity () const
 Derzeitige Kapazität des Heaps. Mehr ...
 
void cleanup ()
 Aufräumen. Mehr ...
 
void clear ()
 Gesamten Speicher freigeben. Mehr ...
 
size_t count () const
 Anzahl belegter Elemente. Mehr ...
 
void dump () const
 Debug-Informationen. Mehr ...
 
size_t elementSize () const
 Größe der Elemente. Mehr ...
 
void free (void *element)
 Speicher freigeben. Mehr ...
 
void init (size_t elementsize, size_t startnum, size_t increase, size_t growpercent=30)
 Initialisierung der Klasse. Mehr ...
 
void * malloc ()
 Speicher anfordern. Mehr ...
 
size_t memoryAllocated () const
 Anzahl Bytes, die allokiert sind. Mehr ...
 
size_t memoryUsed () const
 Anzahl Bytes, die verwendet werden. Mehr ...
 
 PPLNORMALEXCEPTION (NotInitializedException)
 
 PPLNORMALEXCEPTION (AlreadyInitializedException)
 
 PPLNORMALEXCEPTION (HeapCorruptedException)
 
 PPLNORMALEXCEPTION (ElementNotInHeapException)
 
void reserve (size_t num)
 Speicher reservieren. Mehr ...
 

Private Methoden

void increase (size_t num)
 Heap vergrößern. Mehr ...
 

Private Attribute

void * blocks
 
size_t blocksAllocated
 
size_t blocksUsed
 
size_t freeCount
 
size_t increaseSize
 
size_t mem_allocated
 
size_t mem_used
 
size_t myElementSize
 
size_t myGrowPercent
 

Ausführliche Beschreibung

Diese Klasse kann verwendet werden, wenn häufig kleine gleichgroße Speicherblöcke allokiert und wieder freigegeben werden müssen, z.B. von einer häufig verwendeten Klasse oder Kontrollstrukturen für Listen und binäre Bäume. Statt den Speicherbereich jedesmal per Malloc oder new vom Betriebssystem anzufordern, verwaltet diese Klasse eigene größere Speicherblöcke, aus denen die malloc-Anfragen bedient werden. Dadurch wird verhindert, dass der Speicher zu sehr fragmentiert wird.

Bevor die Klasse verwendet werden kann, muss sie zunächst mittels Konstruktor oder der Funktion MemoryHeap::init initialisiert werden. Dabei muss insbesondere die Größe der Elemente angegeben werden und die Anzahl Elemente, um die der Heap jeweils wachsen soll, wenn kein Speicher mehr frei ist. Initial kann dabei auch schon Speicher allokiert werden.

Die Wachstumsgröße selbst wächst bei jeder Vergrößerung um 30%.

Beschreibung der Konstruktoren und Destruktoren

ppl6::MemoryHeap::MemoryHeap ( )
Beschreibung:
Bei Verwendung dieses Konstruktors muss anschließend die Funktion MemoryHeap::init aufgerufen werden.
ppl6::MemoryHeap::MemoryHeap ( size_t  elementsize,
size_t  startnum,
size_t  increase,
size_t  growpercent = 30 
)
Beschreibung:
Bei Verwendung dieses Konstruktors wird die Klasse gleichzeitig auch initialisiert.
Parameter
elementsizeDie Größe der Elemente in Bytes (wird auf 4 Byte aufgerundet)
startnumAnzahl Elemente, für die sofort Speicher allokiert werden soll
increaseAnzahl Elemente, um die der Heap wachsen soll, wenn keine Elemente mehr frei sind.
growpercentOptional: Wachstumsrate der Speichervergrößerung (Default=30%)
Ausnahmebehandlung
OutOfMemoryExceptionWird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen.
ppl6::MemoryHeap::~MemoryHeap ( )
Beschreibung:
Der Destruktor sorgt dafür, dass der komplette durch den Heap belegte Speicher freigegeben wird.

Dokumentation der Elementfunktionen

void * ppl6::MemoryHeap::calloc ( )
Beschreibung:
Mit dieser Funktion wird ein neuer Speicherblock aus dem Heap allokiert und mit Null-Bytes initialisiert.
Rückgabe
Pointer auf den allokierten Speicherbereich
Ausnahmebehandlung
OutOfMemoryExceptionWird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen.
size_t ppl6::MemoryHeap::capacity ( ) const
Beschreibung:
Mit dieser Funktion kann abgefragt werden wieviele Elemente insgesamt allokiert werden können, ohne dass neue Speicherblöcke vom Betriebssystem angefordert werden müssen. Wieviele davon tatsächlich schon verbraucht sind, kann mittels MemoryHeap::count() abgefragt werden.
Rückgabe
Anzahl Elemente, für die Speicher vorrätig ist
void ppl6::MemoryHeap::cleanup ( )
Beschreibung:
Diese Funktion prüft, ob der Heap ungenutze Speicherbereiche verwaltet und gibt diese frei. Das schließt Speicherbereiche, die mit MemoryHeap::reserve reserviert wurden, mit ein. Die Funktion wird automatisch nach 1000 Aufrufen von MemoryHeap::free aufgerufen. Ein freier Speicherblock wird in Reserve gehalten.
void ppl6::MemoryHeap::clear ( )
Beschreibung:
Sämtlicher durch den Heap belegte Speicher wird freigegeben. Alle durch MemoryHeap::malloc oder Heap:calloc allokierten Speicherblöcke verlieren ihre Gültigkeit und dürfen nicht mehr verwendet werden.
size_t ppl6::MemoryHeap::count ( ) const
Beschreibung:
Liefert die Anzahl Elemente zurück, die derzeit in Verwendung sind.
Rückgabe
Anzahl Elemente
void ppl6::MemoryHeap::dump ( ) const
Beschreibung:
Diese Funktion gibt einige Debug-Informationen zum Heap aus, insbesondere Anzahl und Größe der durch den Heap verwalteten Speicherblöcke.
size_t ppl6::MemoryHeap::elementSize ( ) const
Beschreibung:
Liefert die Größe eines Elementes in Bytes zurück
Rückgabe
Größe in Bytes
void ppl6::MemoryHeap::free ( void *  mem)
Beschreibung:
Speicher, der zuvor mit MemoryHeap::malloc oder MemoryHeap::calloc allokiert wurde, wird wieder freigegeben.
Parameter
memPointer auf den freizugebenden Speicherbereich
Ausnahmebehandlung
MemoryHeap::HeapCorruptedExceptionkönnte auftreten, wenn der interne Speicher des Heaps, in dem die Elemente verwaltet werden, überschrieben wurde.
MemoryHeap::ElementNotInHeapExceptionDer mit mem referenzierte Speicherblock wurde nicht über diesen Heap allokiert.
void ppl6::MemoryHeap::increase ( size_t  num)
private
Beschreibung:
Interne Funktion, die aufgerufen wird, um den Heap um eine bestimmte Anzahl Elemente zu vergrößern.
Parameter
numAnzahl Elemente, für die neuer Speicher allokiert werden soll
Ausnahmebehandlung
OutOfMemoryExceptionWird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen.
void ppl6::MemoryHeap::init ( size_t  elementsize,
size_t  startnum,
size_t  increase,
size_t  growpercent = 30 
)
Beschreibung:
Diese Funktion muss vor allen anderen aufgerufen werden, um die Klasse zu initialisieren. Dabei muss insbesondere die Größe der Elemente angegeben werden und die Anzahl Elemente, um die der Heap jeweils wachsen soll, wenn kein Speicher mehr frei ist. Initial kann dabei auch schon Speicher allokiert werden.
Parameter
elementsizeDie Größe der Elemente in Bytes (wird auf 4 Byte aufgerundet)
startnumAnzahl Elemente, für die sofort Speicher allokiert werden soll
increaseAnzahl Elemente, um die der Heap wachsen soll, wenn keine Elemente mehr frei sind.
growpercentOptional: Wachstumsrate der Speichervergrößerung (Default=30%)
Ausnahmebehandlung
OutOfMemoryExceptionWird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen.
void * ppl6::MemoryHeap::malloc ( )
Beschreibung:
Mit dieser Funktion wird ein neuer Speicherblock aus dem Heap allokiert. Dieser wird nicht initialisiert und kann daher Zufallsdaten enthalten.
Rückgabe
Pointer auf den allokierten Speicherbereich
Ausnahmebehandlung
OutOfMemoryExceptionWird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen.
size_t ppl6::MemoryHeap::memoryAllocated ( ) const
Beschreibung:
Gibt zurück, wieviel Bytes zur Zeit durch den Heap allokiert sind, einschließlich Verwaltungsstrukturen und Speicherelementen, die noch nicht in Verwendung sind.
Rückgabe
Anzahl Byte
size_t ppl6::MemoryHeap::memoryUsed ( ) const
Beschreibung:
Gibt zurück, wieviel Bytes zur Zeit durch den Heap in Verwendung sind, einschließlich der Verwaltungsstrukturen.
Rückgabe
Anzahl Byte
ppl6::MemoryHeap::PPLNORMALEXCEPTION ( NotInitializedException  )
ppl6::MemoryHeap::PPLNORMALEXCEPTION ( AlreadyInitializedException  )
ppl6::MemoryHeap::PPLNORMALEXCEPTION ( HeapCorruptedException  )
ppl6::MemoryHeap::PPLNORMALEXCEPTION ( ElementNotInHeapException  )
void ppl6::MemoryHeap::reserve ( size_t  num)
Beschreibung:
Mit dieser Funktion kann vorab Speicher für eine bestimmte Anzahl Elemente reserviert werden. Der Aufruf dieser Funktion ist immer dann sinnvoll, wenn schon vorher bekannt ist, wieviele Elemente benötigt werden, insbesondere, wenn sehr viele Elemente benötigt werden (z.B. Aufbau eines binären Baums).
Parameter
numAnzahl Elemente, für die Speicher vorab allokiert werden soll
Zu beachten
Falls schon Speicher allokiert wurde, wird die Anzahl der bereits allokierten Elemente mit num verrechnet und nur die Differenz zusätzlich reserviert.

Dokumentation der Datenelemente

void* ppl6::MemoryHeap::blocks
private
size_t ppl6::MemoryHeap::blocksAllocated
private
size_t ppl6::MemoryHeap::blocksUsed
private
size_t ppl6::MemoryHeap::freeCount
private
size_t ppl6::MemoryHeap::increaseSize
private
size_t ppl6::MemoryHeap::mem_allocated
private
size_t ppl6::MemoryHeap::mem_used
private
size_t ppl6::MemoryHeap::myElementSize
private
size_t ppl6::MemoryHeap::myGrowPercent
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: