Mentalmente, siempre me he preguntado cómo se ve/throw/catch detrás de escena, cuando las compilaciones de C++ lo traducen al ensamblador. Pero como nunca lo uso, nunca llegué a verificarlo (algunas personas dirían perezoso).C++ try/throw/catch => código de máquina
¿La pila normal se utiliza para realizar el seguimiento de try
s, o se mantiene una pila por hilo separada solo para este propósito? ¿La implementación entre MSVC y g ++ es grande o pequeña? Por favor muéstrame un pseudo asm (el IA-32 también está bien) ¡así que nunca tengo que verificarlo yo mismo! :)
Edit: Ahora obtengo los principios básicos de la implementación de MSVC en el manejo IA-32. ¿Alguien sabe por g ++ en IA-32, o cualquier otra CPU para el caso?
Eso cubre el Manejo de excepciones estructurado de Windows, que está relacionado con, pero no es lo mismo que, el manejo de excepciones de C++.Pietrek menciona en la introducción que las excepciones de C++, tal como lo implementaron Microsoft y Borland, usan SEH, pero que su artículo no cubre * cómo * lo implementan. –
Gran artículo de MSVC/IA-32, aunque extenso. –
Las excepciones de C++ son solo una clase de excepciones SEH, con un contenedor para incluir la información de C++ (la instancia de la clase de excepción). Las excepciones de C++ tienen que usar SEH para que propaguen los límites del kernel, etc. –