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


No puedo encontrar suficiente información para decidir qué compilador debo usar para compilar mi proyecto. Hay varios programas en diferentes computadoras que simulan un proceso. En Linux, estoy usando GCC. Todo está genial. Puedo optimizar el código, compila rápido y no usa tanta memoria.

Hago mi propio benchmark con compiladores MSVC y GCC. Más tarde se producen binarios ligeramente más rápidos (para cada subarquitectura). Aunque el tiempo de compilación es mucho más que MSVC.

Así que decidí usar MinGW. Pero no se puede encontrar ninguna explicación sobre los métodos de manejo de excepciones y sus implementaciones en MinGW. Puedo usar diferentes distribuciones para diferentes sistemas operativos y arquitecturas.

Consideraciones:

  • El tiempo de compilación y la memoria no son importantes para mi uso. Lo único importante es la optimización del tiempo de ejecución. Necesito que mis programas sean lo suficientemente rápidos. Un compilador lento es aceptable.
  • OS: Microsoft Windows XP / 7 / 8 / Linux
  • Arquitectura: Intel Core i7 / Core2 / y un i686 muy antiguo con XP :P
Author: Melebius, 2013-03-28

2 answers

Hay un breve resumen en MinGW-w64 Wiki:

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

La implementación de Dwarf-2 EH para Windows no está diseñada para trabaja en aplicaciones Windows de 64 bits. En el modo win32, la excepción unwind handler no puede propagarse a través de código no dw2, esto significa que cualquier excepción que pase por cualquier "marcos extranjeros" no-dw2" el código fallará, incluyendo Windows DLLS del sistema y DLLs construidos con Visual Studio. Dwarf - 2 desenrollando el código en gcc inspecciona el x86 desenrollar el conjunto y no puede proceder sin otro dwarf-2 desenrolle la información.

El método SetJump LongJump de manejo de excepciones funciona para la mayoría casos en win32 y win64, excepto por fallas de protección general. Se está desarrollando un soporte estructurado de manejo de excepciones en el ccg para superar las debilidades de dw2 y sjlj. En win64, el desenrollar-información son colocado en xdata-sección y no es el .pdata (tabla de descriptores de funciones) en lugar de la pila. Para win32, la cadena de los controladores están en la pila y necesitan ser guardados / restaurados por real código ejecutado.

GCC GNU acerca de Manejo de excepciones :

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

  • DWARF-2 (DW2) EH, que requiere el uso de información de depuración DWARF-2 (o DWARF-3). DW-2 EH puede causar ejecutables a ser ligeramente hinchado porque las grandes mesas de desenrollamiento de la pila de llamadas tienen que ser incluido en los ejecutables th.
  • 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 ha sido compilado con GCC o que no tiene desenrollamiento de la pila de llamadas información.

[...]

Excepción Estructurada Manipulación (SEH)

Windows utiliza su propio mecanismo de manejo de excepciones conocido como Manejo de Excepciones Estructuradas (SEH). [...] Desafortunadamente, GCC todavía no es compatible con SEH. [...]

Véase también:

 85
Author: ollo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-24 13:18:30

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

DWARF (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, que significa que las excepciones no se pueden lanzar sobre, por ejemplo, el sistema Windows DLL.

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

fuente: http://qt-project.org/wiki/MinGW-64-bit

 67
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-27 22:02:25