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
    Plassy

    Es 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




Anmelden zum Antworten