Saltar al contenido

¿Cuál es la diferencia entre sjlj vs dwarf vs seh?

Hola usuario de nuestro sitio web, hallamos la solución a lo que necesitas, desplázate y la hallarás aquí.

Solución:

Hay una breve descripción general en MinGW-w64 Wiki:

¿Por qué mingw-w64 gcc no admite el manejo de excepciones Dwarf-2?

El Enano-2 EH La implementación para Windows no está diseñada para funcionar en aplicaciones de Windows de 64 bits. En el modo win32, el controlador de desenrollado de excepciones no puede propagarse a través de código que no sea compatible con dw2, lo que significa que cualquier excepción que pase por cualquier código de “marcos externos” que no sea compatible con dw2 fallará, incluidas las DLL del sistema de Windows y las DLL creadas con Visual Studio. El código de desbobinado de Dwarf-2 en gcc inspecciona el ensamblaje de desbobinado x86 y no puede continuar sin otra información de desbobinado de dwarf-2.

El Establecer Salto Salto Largo El método de manejo de excepciones funciona en la mayoría de los casos tanto en Win32 como en Win64, excepto por fallas de protección generales. Se está desarrollando soporte estructurado de manejo de excepciones en gcc para superar las debilidades de dw2 y sjlj. En win64, la información de desenredado se coloca en la sección xdata y está el .pdata (tabla de descripción de funciones) en lugar de la pila. Para win32, la cadena de controladores está en la pila y debe guardarse/restaurarse mediante un código ejecutado real.

GCC GNU sobre Manejo de excepciones:

GCC admite dos métodos para el manejo de excepciones (EH):

  • ENANO-2 (DW2) EH, que requiere el uso de información de depuración DWARF-2 (o DWARF-3). DW-2 EH puede hacer que los ejecutables se inflen un poco porque se deben incluir grandes tablas de desenrollado de pilas de llamadas en los ejecutables.
  • Un método basado en setjmp/longjmp (SJLJ). EH basado en SJLJ es mucho más lento que DW2 EH (penalizando incluso la ejecución normal cuando no se lanzan excepciones), pero puede funcionar en código que no se ha compilado con GCC o que no tiene información de desbobinado de pila de llamadas.

[…]

Manejo estructurado de excepciones (SEH)

Windows usa su propio mecanismo de manejo de excepciones conocido como Manejo estructurado de excepciones (SEH). […]

Desafortunadamente, GCC aún no es compatible con SEH. […]

Ver también:

  • Modelos de manejo de excepciones de GCC
  • Manejo de excepciones de C++ para IA-64
  • EH principiantes cómo

SJLJ (setjmp/longjmp): – disponible para 32 bits y 64 bits – no de “costo cero”: incluso si no se lanza una excepción, incurre en una penalización de rendimiento menor (~15 % en código pesado de excepciones) – permite que las excepciones atravesar, por ejemplo, devoluciones de llamada de Windows

ENANO (DW2, dwarf-2): disponible solo para 32 bits, sin sobrecarga de tiempo de ejecución permanente, necesita que toda la pila de llamadas esté habilitada para dwarf, lo que significa que no se pueden generar excepciones, por ejemplo, DLL del sistema de Windows.

SEH (excepción de sobrecarga cero): estará disponible para GCC 4.8 de 64 bits.

fuente: https://wiki.qt.io/MinGW-64-bit

Si te ha resultado útil este post, sería de mucha ayuda si lo compartes con más juniors de esta manera contrubuyes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *