Die Implementierungen können abweichen, aber es gibt einige grundlegende Ideen, die sich aus den Anforderungen ergeben.
Das Ausnahmeobjekt selbst ist ein Objekt, das in einer Funktion erstellt und in einem Aufrufer davon zerstört wurde. Daher ist es normalerweise nicht möglich, das Objekt auf dem Stapel zu erstellen. Andererseits sind viele Ausnahmeobjekte nicht sehr groß. Ergo kann man zB einen 32-Byte-Puffer und einen Überlauf zum Heap erstellen, wenn tatsächlich ein größeres Ausnahmeobjekt benötigt wird.
Für die tatsächliche Übertragung der Kontrolle gibt es zwei Strategien. Eine besteht darin, genügend Informationen im Stapel selbst aufzuzeichnen, um den Stapel abzuwickeln. Dies ist im Grunde eine Liste der auszuführenden Destruktoren und Ausnahmebehandlungsroutinen, die die Ausnahme möglicherweise abfangen. Wenn eine Ausnahme auftritt, führen Sie den Stapel aus, der diese Destruktoren ausführt, bis Sie einen passenden Fang finden.
Die zweite Strategie verschiebt diese Informationen in Tabellen außerhalb des Stapels. Wenn nun eine Ausnahme auftritt, wird der Aufrufstapel verwendet, um herauszufinden, welche Bereiche eingegeben, aber nicht beendet werden. Diese werden dann in den statischen Tabellen nachgeschlagen, um festzustellen, wo die ausgelöste Ausnahme behandelt wird und welche Destruktoren dazwischen ausgeführt werden. Dies bedeutet, dass auf dem Stapel weniger Ausnahmekosten anfallen. Absenderadressen werden sowieso benötigt. Die Tabellen sind zusätzliche Daten, aber der Compiler kann sie in ein bedarfsgesteuertes Segment des Programms einfügen.