next up previous
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.


\begin{warning}
Greifen Sie nie auf einen Zeiger zu, dessen Speicherbereich nich...
...n {\tt Heap},
wenn Sie keine Ausnahmebehandlungen vorsehen wollen.
\end{warning}


\begin{note}
Aus Gr\uml {u}nden der Portabilit\uml {a}t sollte --- wenn m\uml {o}glich --- {\tt Allocate}
der Prozedur {\tt AllocMem} vorgezogen werden.
\end{note}


next up previous
Nächste Seite: InOut Aufwärts: Bibliotheksmoduln Vorherige Seite: GfxMacros
Claudio Nieder 2000-11-12