Implementacje mogą się różnić, ale istnieje kilka podstawowych pomysłów wynikających z wymagań.
Sam obiekt wyjątku jest obiektem utworzonym w jednej funkcji, zniszczonym w funkcji wywołującej. W związku z tym zwykle nie jest możliwe utworzenie obiektu na stosie. Z drugiej strony wiele obiektów wyjątków nie jest zbyt dużych. Ergo, można utworzyć np. 32-bajtowy bufor i przepełnić stertę, jeśli faktycznie potrzebny jest większy obiekt wyjątku.
Jeśli chodzi o faktyczne przeniesienie kontroli, istnieją dwie strategie. Jednym z nich jest zapisanie wystarczającej ilości informacji w samym stosie, aby rozwinąć stos. Jest to w zasadzie lista destruktorów do uruchomienia i programów obsługi wyjątków, które mogą przechwytywać wyjątek. Kiedy zdarzy się wyjątek, cofnij stos wykonujący te destruktory, aż znajdziesz pasujący zaczep.
Druga strategia przenosi te informacje do tabel poza stosem. Teraz, gdy wystąpi wyjątek, stos wywołań jest używany do ustalenia, które zakresy są wprowadzane, ale nie wychodzą. Są one następnie wyszukiwane w tabelach statycznych, aby określić, gdzie zostanie obsłużony zgłoszony wyjątek i które destruktory działają między nimi. Oznacza to, że na stosie jest mniej wyjątków; i tak potrzebne są adresy zwrotne. Tabele to dodatkowe dane, ale kompilator może umieścić je w segmencie programu na żądanie.