-
-
Erfahrener Benutzer
Robotik Visionär
Ob der Code bei der Berechnung in einer Zeile schneller ist als mit vielen Zwischenschritten, hängt vom Compiler ab. Bei den meisten C Compilern wird das egal sein. Viele Temporäre Variablen haben bei GCC zum Beispiel gar keinen Platz im RAM und die Daten bleiben in Registern. Das könnte auch vor 20 Jahren schon so gewesen sein.
Bascom kennt kein Equivalent zum "volatile" in C, und behandelt alle Variablen so, als wären sie in C volatile. Das heißt die Werte müssen alle in RAM geschrieben, und auch wieder aus dem RAM gelesen. Das macht den Compiler etwas einfacher, da viele Optimierungen so gar nicht möglich sind. Wenn in C ein variable nicht volatile ist, weiss der Compiler, dass sich der Inhalt nicht durch Interrupts, oder direkten Hardwareeinfluß ändert. Entsprechend sind mehr Optimierungen möglich.
Wenn mehrere Operationen in einer Zeile möglich wären, hätte der Complier die Möglichkeit Zwischenergebnisse in Registern zu lassen und erst am Ende des BASIC-befehls die Daten ins RAM zu schreiben. Der transfer der Daten ins RAM und zurück kann durchaus länger dauern als eine Addition oder ähnliches. So wie es aussieht führt Bascom ohnehin nur sehr wenige Optimierungen durch, wenn überhaupt.
Ein paar Vorteil hat der Recht einfache Compiler auch: viele Register werden von Bascom gar nicht genutzt und können bei Inline ASM frei genutzt werden. Außerdem enfällt für Inline ASM eine aufwendige Syntax für die Datenübergabe, denn die geht immer über das RAM.
Man muß aber auch sagen, das die Optimierungen des Compilers auch Nachteile haben. Bei der Simulation kann man nicht immer den VErlauf im Quelltext nachvollziehen und so Fehler eventuell schwerer finden. Vor allem ein vergessenes "volatile" ist ein beliebter Fehler, den es ohne Optimierungen nicht gäbe.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen