Logo

Marco Cantù's
Essential Pascal

Anhang A:
Glossar der verwendeten Begriffe

Hier folgt ein kurzer Glossar der technischen Begriffe, die in diesem Buch verwendet werden. Diese hätten auch irgendwo im Text definiert werden können, aber ich habe beschlossen, sie hier zusammenzufassen, da sie so leichter zu finden sind.

Die Termini in dieser Tabelle wurden von den Lesern von Essential Pascal vorgeschlagen. Allerdings bestehen nur zu den Begriffen aktive Links, für die schon eine Beschreibung vorliegt.

API array class method
(Klassenmethode)
class reference
(Klassenreferenz)
dynamic Heap (Hauptspeicher)
literal
(Zeichenkette)
memory leak
(Speicherleck)
owner painting
(zeichnen)
parent self
Stack (Hauptspeicher) static virtual      

Heap (Hauptspeicher)

Der Begriff Heap bezeichnet einen Teil des Hauptspeichers, der für ein Programm verfügbar ist. Er wird auch als dynamischer Speicherbereich bezeichnet. Der Heap ist der Bereich, in dem das Anfordern und Freigeben von Speicher in beliebiger Reihenfolge erfolgt. Das bedeutet, wenn man drei Speicherblöcke nacheinander anfordert, so können sie später in beliebiger Reihenfolge wieder freigegeben werden. Die Heap-Verwaltung kümmert sich dabei um alle dazu erforderlichen Details, so dass sie einfach neuen Speicher mit GetMem oder durch den Aufruf eines Constructors, zur Erzeugung eines neuen Objekts, anfordern können. Delphi wird ihnen einen neuen Speicherblock zurückliefern (möglicherweise durch Wiederverwendung von Speicherblöcken, die sie zuvor zurückgegeben haben).

Der Heap ist einer von drei Speicherbereichen, die für eine Applikation verfügbar sind. Die zwei anderen Bereiche sind der globale Speicher (in dem globale Variablen vereinbart sind) und der Stack. Im Unterschied zum Heap werden globale Variablen angefordert, wenn das Programm beginnt und verbleiben dort bis es wieder endet. Für eine Beschreibung des Stacks sehen Sie unter dem entsprechenden Eintrag in diesem Glossar nach.

Delphi verwendet den Heap zur Anforderung von Speicher für alle und jedes Objekt, weiterhin den aktuellen Textinhalt von Strings, für dynamische Arrays und für spezielle Anforderungen von dynamischem Speicher (über GetMem).

Windows gestattet einer Applikation, einen Adressraum von 2 GigaByte zu benutzen, der größte Teil davon kann dabei vom Heap verwendet werden.

Stack (Hauptspeicher)

Der Begriff Stack bezeichnet einen Teil des Hauptspeichers, der für ein Programm verfügbar ist. Er wird dynamisch angefordert und freigegeben, allerdings in einer spezifischen Reihenfolge. Die Stackbelegung bildet einen LIFO, Last In First Out (zuletzt hinein, zuerst heraus). Das bedeutet, dass das letzte Speicherobjekt das sie angefordert haben, das erste sein wird welches wieder freigegeben werden kann. Eine typische Anwendung für den Stack-Speicher sind Routinen (Prozeduren, Funktionen und Methodenaufrufe). Wenn Sie eine Routine aufrufen, so werden deren Parameter und Rückgabewerte auf dem Stack plaziert (es sei denn Sie optimieren den Aufruf, wie es Delphi standardmäßig tut). Auch die Variablen, die sie innerhalb einer Routine deklarieren (durch Anwendung eines var-Blocks vor dem Schlüsselwort begin) werden auf dem Stack gespeichert, so dass sie automatisch freigegeben werden wenn die Routine endet (vor der Rückkehr zur aufrufenden Routine, in LIFO-Reihenfolge).

Der Stack ist einer von drei Speicherbereichen, die für eine Applikation zur Verfügung stehen. Die anderen beiden werden als globaler Speicher und als Heap bezeichnet. Vergleichen Sie dazu den Eintrag Heap in diesem Glossar.

Delphi verwendet den Stack für die Parameter und Rückgabewerte von Routinen (es sei denn, Sie verwenden die standardmäßige Aufrufkonvention Register), für lokale Variablen von Routinen, für den Aufruf von Windows-API-Funktionen usw..

Windows-Applikationen können einen großen Speicherbereich für den Stack reservieren lassen. In Delphi stellen Sie dazu den entsprechenden Parameter auf der Seite Linker der Projektoptionen ein. Falls Sie das nicht tun, so existiert bereits ein Vorgabewert. Wenn Sie eine Fehlermeldung "Stack-Überlauf" erhalten, so liegt das wahrscheinlich eher daran, dass Sie eine Funktion sich selbst rekursiv aufrufen lassen, als dass der Stack-Bereich zu klein ist.

© Copyright Marco Cantù, Wintech Italia Srl 1995-2000
© Copyright der deutschen Übersetzung Immo Wache, 2000