2010-02-12 12 views

Respuesta

5

de la norma:

15.2.4: La memoria para la copia temporal de la excepción de ser lanzado es asignado de forma no especificada, , excepto como se indica en 3.7.3.1.

Y 3.7.3.1 dice:

3.7.3.1: Todos los objetos que no tienen una duración de almacenamiento dinámico ni son locales tienen duración de almacenamiento estático. El almacenamiento para estos objetos debe durar para la duración del programa (3.6.2, 3.6.3).

3

La respuesta es "en un área misteriosa gestionada por el compilador": en serio, la norma no especifica dónde deben almacenarse.

0

excepciones siempre se tiran por el valor de lo que no hay problema, incluso si asigna en la pila

1

Es la cocina cotizada de la norma, no se especifica. La mayoría de las implementaciones los asignan desde el montón, ya que necesitan sobrevivir al proceso de desenrollado de la pila, lo que puede eliminar los fotogramas de la pila (cuando se lanza fuera de una función) o crear nuevos (destructores de llamadas, etc.). GCC usa la función incorporada __cxa_allocate_exception para asignar la memoria.

Cuestiones relacionadas