Las implementaciones pueden diferir, pero hay algunas ideas básicas que se derivan de los requisitos.
El objeto de excepción en sí mismo es un objeto creado en una función, destruido en un llamador de la misma. Por lo tanto, normalmente no es posible crear el objeto en la pila. Por otro lado, muchos objetos de excepción no son muy grandes. Ergo, uno puede crear, por ejemplo, un búfer de 32 bytes y desbordarse en el montón si realmente se necesita un objeto de excepción más grande.
En cuanto a la transferencia real de control, existen dos estrategias. Uno es registrar suficiente información en la propia pila para desenrollar la pila. Esta es básicamente una lista de destructores para ejecutar y controladores de excepciones que pueden detectar la excepción. Cuando ocurre una excepción, ejecute la pila ejecutando esos destructores hasta que encuentre una captura coincidente.
La segunda estrategia mueve esta información a tablas fuera de la pila. Ahora, cuando ocurre una excepción, la pila de llamadas se usa para averiguar qué ámbitos se ingresan pero no se salen. Luego, se buscan en las tablas estáticas para determinar dónde se manejará la excepción lanzada y qué destructores se ejecutan en el medio. Esto significa que hay menos gastos generales de excepción en la pila; Las direcciones de retorno son necesarias de todos modos. Las tablas son datos adicionales, pero el compilador puede colocarlas en un segmento del programa cargado por demanda.