Wie ist try & catch in einem kompieler implementiert??
-
Hi erstmal.
Ich würde gern mal wissen wie sowas implementiert ist.
Wie wird zur laufzeit erkannt, wohin bei einem "throw" Aufruf
gesprungen werden muss??Werden da irgend welche Informationen im Stack gespeichert und
der wird dann rückwärts durchsucht... oder wie läuft Das ab??mfg
Plassy
-
Der Compiler protokolliert jedes Ein- und Austreten in/aus einen try-Block und legt sich das auf nem Stack ab (oder popt es eben wieder runter). Wenn eine Exception geworfen wird, wird der Stack von oben beginnend durchsucht, bis der erste passende try-Block gefunden wird.
-
Und wie funktioniert das jetzt genau??
Ich meine, wie wird so eine Information im Stack erkannt??
Die Daten im Stack könnte doch jeden beliebigen wert haben...Wie will man jetz erkennen, dass es sich um eine Sprungmarke zu einem
try-Block handelt??mfg
Plassy
-
Schau dir halt mal den Assembler-Output vom Compiler an. So schwer ist es nicht zu erkennen, was da passiert. Falls du unter Windows bist, probier's zuerst mit reinem C und Structured Exception Handling, das ist viel übersichtlicher.
-
Plassy schrieb:
Und wie funktioniert das jetzt genau??
Ich meine, wie wird so eine Information im Stack erkannt??
Die Daten im Stack könnte doch jeden beliebigen wert haben...Wie will man jetz erkennen, dass es sich um eine Sprungmarke zu einem
try-Block handelt??mfg
PlassyEs könnte für die try-Blöcke einen eigenen Stack geben. So detailliert weiss ich das nicht. Vielleicht macht das auch jeder Compiler ein bisschen anders. Auf jeden Fall muss es ja nicht unbedingt auf de Call Stack liegen.
-
Was ist ein Kompieler? *SCNR
-