Organisation des Speichers zur Laufzeit
Eingeordnet in Informatik
Geschrieben am in
Deutsch mit einer Größe von 2,46 KB
Organisation des Speichers zur Laufzeit
Die Organisation hängt von der Art der Sprache (deklarativ, imperativ), dem Compiler und dem Betriebssystem ab.
Allgemeine Struktur von Programmiersprachen
Wenn Sie ein Programm ausführen, ordnet der OS-Loader die Größe des Speichers zu und lädt den auszuführenden Code (gespeichert in einer Datei) in den entsprechenden Bereich.
Das Betriebssystem sollte Kollisionen zwischen Heap und Stack erkennen. In diesen Fällen kann das Programm abbrechen oder eine erhöhte Menge an Speicher zugewiesen bekommen.
In Systemen mit Paging kann das obige Schema zerlegt und zwischen realem und virtuellem Speicher verstreut werden. Jede Bezugnahme auf eine Speicherstelle im Code sollte relativ zu der vom Betriebssystem zugewiesenen Position des Prozesses sein.
Vorwahl (Code-Segment)
Dieser Bereich enthält die Anweisungen zur Ausführung des Programms, also den in Maschinencode übersetzten Code für alle Prozeduren und Funktionen.
Code-Größe und Inhalt werden bei der Kompilierung berechnet. Die ausführbare Datei enthält diesen Code sowie Informationen über die Größe der benötigten Speicherblöcke. Diese Informationen werden verwendet, um das Programm in den Speicher zu laden. Der Code wird als kompakter Block gespeichert.
Einige Compiler unterteilen den Code in Fragmente (Overlays), wenn der verfügbare Speicher kleiner als die Größe des Programms ist. Die Fragmente sind Abschnitte des Codes, die separat in den Speicher geladen werden. Der Compiler muss entscheiden, wie die Funktionen in Gruppen unterteilt werden, damit während der Ausführung nicht zu viele Ladevorgänge erforderlich sind.
Statischer Speicher
Der Compiler reserviert einen festen Speicherplatz für jede im Programm verwendete Variable. Hier werden Konstanten und globale Variablen gespeichert. Die Speicherzuweisung erfolgt zur Kompilierzeit unter Berücksichtigung der Größe der Variablen. Die Adresse jeder Variablen oder Konstanten ist fest und wird über das Datensegment (DS) referenziert.
Compiler, die ausschließlich auf statischem Speicher basieren:
- Können nicht mit rekursiven Funktionen umgehen.
- Weisen jeder Funktion einen Aktivierungsdatensatz zu, der Parameter, lokale Variablen und temporäre Variablen enthält.
- Nutzen den statischen Speicher für globale Variablen und die Aktivierungsreihenfolge der einzelnen Funktionen.