![]() | Patrick's Programming Library Version 6.4.21 - Dokumentation |
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 |
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%.
ppl6::MemoryHeap::MemoryHeap | ( | ) |
ppl6::MemoryHeap::MemoryHeap | ( | size_t | elementsize, |
size_t | startnum, | ||
size_t | increase, | ||
size_t | growpercent = 30 |
||
) |
elementsize | Die Größe der Elemente in Bytes (wird auf 4 Byte aufgerundet) |
startnum | Anzahl Elemente, für die sofort Speicher allokiert werden soll |
increase | Anzahl Elemente, um die der Heap wachsen soll, wenn keine Elemente mehr frei sind. |
growpercent | Optional: Wachstumsrate der Speichervergrößerung (Default=30%) |
OutOfMemoryException | Wird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen. |
ppl6::MemoryHeap::~MemoryHeap | ( | ) |
void * ppl6::MemoryHeap::calloc | ( | ) |
OutOfMemoryException | Wird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen. |
size_t ppl6::MemoryHeap::capacity | ( | ) | const |
void ppl6::MemoryHeap::cleanup | ( | ) |
void ppl6::MemoryHeap::clear | ( | ) |
size_t ppl6::MemoryHeap::count | ( | ) | const |
void ppl6::MemoryHeap::dump | ( | ) | const |
size_t ppl6::MemoryHeap::elementSize | ( | ) | const |
void ppl6::MemoryHeap::free | ( | void * | mem | ) |
mem | Pointer auf den freizugebenden Speicherbereich |
MemoryHeap::HeapCorruptedException | könnte auftreten, wenn der interne Speicher des Heaps, in dem die Elemente verwaltet werden, überschrieben wurde. |
MemoryHeap::ElementNotInHeapException | Der mit mem referenzierte Speicherblock wurde nicht über diesen Heap allokiert. |
|
private |
num | Anzahl Elemente, für die neuer Speicher allokiert werden soll |
OutOfMemoryException | Wird 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 |
||
) |
elementsize | Die Größe der Elemente in Bytes (wird auf 4 Byte aufgerundet) |
startnum | Anzahl Elemente, für die sofort Speicher allokiert werden soll |
increase | Anzahl Elemente, um die der Heap wachsen soll, wenn keine Elemente mehr frei sind. |
growpercent | Optional: Wachstumsrate der Speichervergrößerung (Default=30%) |
OutOfMemoryException | Wird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen. |
void * ppl6::MemoryHeap::malloc | ( | ) |
OutOfMemoryException | Wird geworfen, wenn nicht genug Speicher verfügbar ist, um den Heap anzulegen. |
size_t ppl6::MemoryHeap::memoryAllocated | ( | ) | const |
size_t ppl6::MemoryHeap::memoryUsed | ( | ) | const |
ppl6::MemoryHeap::PPLNORMALEXCEPTION | ( | NotInitializedException | ) |
ppl6::MemoryHeap::PPLNORMALEXCEPTION | ( | AlreadyInitializedException | ) |
ppl6::MemoryHeap::PPLNORMALEXCEPTION | ( | HeapCorruptedException | ) |
ppl6::MemoryHeap::PPLNORMALEXCEPTION | ( | ElementNotInHeapException | ) |
void ppl6::MemoryHeap::reserve | ( | size_t | num | ) |
num | Anzahl Elemente, für die Speicher vorab allokiert werden soll |
num
verrechnet und nur die Differenz zusätzlich reserviert.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |