
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo miteinander > > Wie es besser gemacht werden kann, zeigt die OM. > Wenn das so besser ist, warum habe ich dann auf meinem PC das gleiche Stacksystem wie auf der neuen M Unit? Gute Frage. Wahrscheinlich aus Performancegründen. Unter anderem führt das gemischte Stackhandling zur besseren Ausnutzung des zur Verfügung stehenden Speichers. Das ist übrigens auch auf der neuen M-Unit und Conrad-Micro so: Unterprogramme lassen sich "üblicherweise" stärker verschachteln und es lassen sich komplexere Ausdrücke evaluieren als auf der 1.1 und der OM. Aber es gibt entscheidende Nachteile, das sieht man sehr deutlich, wenn man einmal nach "stack overflow" und ähnlichem bei Google sucht. Zitat: "The potential for stack overflow in embedded systems is hard to detect by testing." Dazu auch buffer overflow und exploit. Auf dem PC versucht man Stacküberläufe zu vermeiden, indem man den Stack übertrieben groß macht. Protected Mode Programmierung unterstützt außerdem das Verhindern von Speicherzugriffen außerhalb des gültigen Bereichs. > Ja genau zwei Byte pro Funktion zum Speichern in die Rückgabevariable. Das eigentliche Sparpotential liegt in der Parameterübergabe. Zwei Byte pro Übergabeparameter und zwar bei jedem Funktions- oder Subroutinenaufruf. Das gilt zwar nicht für die erste Benutzung der Funktion oder Subroutine, aber für alle weiteren. > Die 32 Byte Code ergeben sich u.a. aus einem 3 Byte Sprung am Anfang des Programms, um zum Hauptprogramm zu springen und 2 ENDs am Ende des Programms hinzu kommt noch ein von mit in das Beispiel eingebauten unnützen END Befehl. Wunderbar die vom unachtsamen Leser nur bei genauerem Lesen zu entdeckenden beiden Wörter "unter anderem". Auf das mögliche Sparpotential bei der Parameterübergabe gehst Du überhaupt nicht ein. Und die zusätzlichen 8 Byte Code bei der 2.0 (wir erinnern uns: auf der 2.0 sind es 40 Byte) kommen eben nicht nur durch die durch Dich aufgeführten Dinge zustande, sondern durch suboptimalen Code auch an anderer Stelle. Eine Detokensierung zeigt das eindeutig. Wenn es wirklich nur "zwei Byte pro Funktion zum Speichern in die Rücksprungvariable" wären, würde der Code doch wohl nur 4 Byte länger sein. Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |