Die Umsetzung kann unterschiedlich sein, aber es gibt einige grundlegende Ideen, die sich aus den Anforderungen ergeben.
Das Exception-Objekt selbst ist ein Objekt, das in einer Funktion erzeugt und in einem ihrer Aufrufer zerstört wird. Daher ist es normalerweise nicht möglich, das Objekt auf dem Stack zu erstellen. Andererseits sind viele Ausnahmeobjekte nicht sehr groß. Man kann also z.B. einen 32-Byte-Puffer erstellen und auf den Heap überlaufen lassen, wenn ein größeres Ausnahmeobjekt benötigt wird.
Für die eigentliche Übertragung der Kontrolle gibt es zwei Strategien. Die eine besteht darin, genügend Informationen im Stapel selbst aufzuzeichnen, um den Stapel abzuwickeln. Dabei handelt es sich im Wesentlichen um eine Liste von auszuführenden Destruktoren und Ausnahmebehandlern, die die Ausnahme abfangen könnten. Wenn eine Ausnahme auftritt, wird der Stapel durch die Ausführung dieser Destruktoren zurückgespult, bis man eine passende Abfangfunktion findet.
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 verlassen wurden. Diese werden dann in den statischen Tabellen nachgeschlagen, um zu bestimmen, wo die ausgelöste Ausnahme behandelt wird, und welche Destruktoren dazwischen laufen. Dies bedeutet, dass weniger Ausnahmen auf dem Stack liegen; Rücksprungadressen werden ohnehin benötigt. Bei den Tabellen handelt es sich um zusätzliche Daten, aber der Compiler kann sie in ein bedarfsgesteuertes Segment des Programms einfügen.