Der Quelltext eines -Programmes wird vom Compiler bereits auf grösstmögliche Fehlerfreiheit kontrolliert. Der Compiler prüft, ob die Syntax des Programmes korrekt ist. Einige Fehler sind jedoch erst zur Laufzeit des Programmes feststellbar.
Für diese Fehler wird vom Compiler (bei entsprechend eingeschalteten Optionen!) Kontrollcode erzeugt, der bei Eintritt bestimmter Fehlerzustände durchlaufen wird und zum Programmabbruch mit einem Laufzeitfehler-Requester führt. Dies bringt dem Programmierer zwei entscheidende Vorteile:
Diesen Vorteilen stehen aber auch Nachteile gegenüber:
Die genauen Bedingungen für Laufzeitfehler können Sie im Abschnitt
5.4.3
ab Seite nachlesen, an dieser Stelle wollen wir
lediglich einige Beispiele für den erzeugten Prüfcode und seine
Auswirkung auf die Geschwindigkeit geben. Der Prüfcode ist in den
Beispielen jeweils durch einen Pfeil gekennzeichnet.
Bei Prozessoren vom 68020 an aufwärts wird für RangeCheck und NilCheck jeweils kürzerer und schnellerer Prüfcode generiert, weil die auf diesen Prozessoren verfügbaren Befehle ,,TRAPcc`` und ,,CHK.L`` benutzt werden und somit der kurze Sprung ,,drumherum`` unnötig ist.
Bereichs-, Überlaufs- und NIL-Prüfung benötigen wenig zusätzlichen Code. In diesen Prozeduren wurde nur jeweils eine bis maximal drei Anweisungen eingefügt (2 bis 6 Byte).
Anders verhält es sich mit der Stapelüberlauf-Prüfung. Beim Eingangscode einer Prozedur müssen zwei Befehle eingefügt werden (jenachdem, ob der Wert in ein Byte passt, ergibt dies 6 oder 10 Byte). Der eingefügte Code ruft eine Prozedur im Modul Arts auf, die überprüft, ob die benötigte Anzahl Byte auf dem Stapel noch verfügbar ist.
Alle Überprüfungen kosten nicht nur Speicherplatz, sondern auch Ausführungszeit:
|
Wie man sieht, ist also die Stapelüberprüfung die grösste ,,Bremse``. Sollte ein Programmteil nicht schnell genug laufen, empfiehlt es sich, als erstes die Stapelüberlaufprüfung auszuschalten, weil man damit das Programm am ehesten beschleunigen kann.