Nächste Seite: InOut Aufwärts: Bibliotheksmoduln Vorherige Seite: GfxMacros

# Heap

Das Modul `Heap` stellt die für dynamische Speicher-Allozierung und Deallozierung benötigten Prozeduren zur Verfügung. Es behält die Kontrolle über alle allozierten Speicherbereiche und gibt sie im Falle eines Programmabsturzes oder am Programmende wieder frei.

Das Modul Heap bietet eine einfache Schnittstelle zu den Funktionen der Speicherverwaltung des Betriebssystems. Es werden die Exec-Funktionen `AllocMem`, `FreeMem` und `AvailMem` verwendet. Die durch Prozeduren des Moduls `Heap` angeforderten Speicherblöcke werden in einer Liste vermerkt. Dies ermöglicht später die Freigabe der allozierten Speicherbereiche. Die Verkettung benötigt etwas zusätzlichen Speicher (8 Byte) und Zeit.

Folgende Informationen werden umnmittelbar vor dem allozierten Block abgelegt:

`next: ADDRESS; (* Zeiger auf folgenden Block oder NIL *)
size: LONGINT; (* Gr"osse des Blocks *)
`

Die Prozedur `Allocate` alloziert einen Bereich der in Byte angegebenen Grösse `size` und weist dessen Adresse dem Parameter `adr` zu. Ist der Parameter `size` negativ, so bricht das aufrufende Programm mit einem Laufzeitfehler ab. Ist nicht mehr genügend Speicher vorhanden, erhält `adr` den Wert `NIL`. Ein erfolgreich angeforderter Speicherblock wird mit Nullen gefüllt.

`Deallocate` gibt einen zuvor mit `Allocate` oder `AllocMem` angeforderten Speicherbereich wieder frei und weist dem angegebenen Zeiger den Wert `NIL` zu. Weist der Zeiger auf keinen durch `Heap` reservierten Speicher, wird der Aufruf ignoriert.

`Available` gibt die Grösse des gesamten freien Speicherplatzes zurück. Ist der Parameter `chipMem` auf `FALSE` gesetzt, wird die Speichergrösse in Chip- und Fast-Memory zusammen, sonst nur diejenige in Chip-Memory angegeben.

`Largest` gibt die gibt die Grösse des grössten, zusammenhängenden Speicherbereiches zurück. Für den Parameter `chipMem` gilt das gleiche wie bei `Available`.

Die Prozedur `AllocMem` ist eine Variante der `Allocate`-Prozedur. Der Parameter `chipMem` gibt an, ob der Speicher im Chip-Memory alloziert werden soll, oder ob der Typ des Speichers gleichgültig ist; er kann dann Fast- oder Chip-Memory sein. In jedem Fall wird der Speicherbereich mit Nullen initialisiert.

`BlockSize` ist eine Hilfsfunktion, die es erlaubt, nachträglich die Grösse eines Speicherbereiches abzufragen. Wurde der Bereich nicht durch das Modul `Heap` angefordert, wird der Wert 0 zurückgegeben.

Nächste Seite: InOut Aufwärts: Bibliotheksmoduln Vorherige Seite: GfxMacros