Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03167.jsonl.gz/650

Zunächst wollen wir einige Begriffe erklären:
Ein Programm ist genau dann residentfähig, wenn der folgende und weitere Aufrufe zu den gleichen Ergebnissen führen. Es darf also keinesfalls seinen eigenen Code verändern oder von einem bestimmten Inhalt seiner Variablen ausgehen.
Dies ist nicht zu verwechseln mit wiedereintrittsfähigen Prozeduren (die notwendig werden, wenn ein M2Amiga-Programm eigene Tasks oder Prozesse starten will), wir reden hier nur von Programmen! Um eine einzelne Prozedur reentrant zu kodieren ist unter Umständen weit mehr Denkarbeit erforderlich.
Beide Eigenschaften werden vom Laufzeitsystem Arts unterstützt:
Bei ,,normalen`` und residentfähigen Programmen wird bei jedem Programmstart der Speicher der -Variablen mit Nullen initialisiert. Wenn nur -Variablen im Programm vorhanden sind, ist das Programm folglich residentfähig.
Für Programme, die reentrant sind, wird vom Betriebssystem Speicher angefordert und die initialisierten Daten dort hineinkopiert. Damit ein Programm reentrant sein kann, dürfen einzig Variablen vom Typ vorhanden sein.
Zusätzlich zur Speicher-Allokation überprüft das Laufzeitsystem bei wiedereintrittsfähigen Programmen auch die Grösse des vorhandenen Stapels (Stack). Ist dieser kleiner als eine Mindestgrösse, die beim Linken angegeben werden kann, so wird auch für den Stack ein eigener Speicher reserviert. Deshalb ist es beispielsweise möglich, dass der Compiler, der in Extremfällen 20 KByte und mehr Stack benötigt, auch von einem CLI gestartet werden kann, dessen STACK auf 4000 Byte eingestellt ist.
Da der Schritt von residentfähig nach reentrant relativ klein ist und im fertigen Programm durch ein unterschiedliches Laufzeitsystem lediglich einige Byte kostet, werden wir im folgenden davon ausgehen, dass residentfähige Programme als reentrant gelinkt werden und beide Begriffe synonym verwenden.
Der Programmierer kann sich immer darauf verlassen, dass die globalen Variablen des Programmes mit dem Wert Null initialisiert sind, wenn es seinem Typ entsprechend (nichtresidentfähig, residentfähig, reentrant) eingesetzt wird.