Quelle est la différence entre MinGW SEH et MinGW SJLJ?
Je suis juste de commencer à apprendre le C et l'installation de maintenant QT x64 (formulaire ici: http://tver-soft.org/qt64). J'ai deux options pour installer: MinGW 4.9.2 SEH
ou MinGW 4.9.2 SJLJ
.
Question: Qui est la meilleure pour installer et pourquoi?
J'ai lu Quelle est la différence entre sjlj vs nain vs seh? et https://wiki.qt.io/MinGW-64-bit#Exception_handling:_SJLJ.2C_DWARF.2C_and_SEH mais ne rien comprendre (nouvelle C et compiller langues).
- Pour les gens qui sont en train de voter pour fermer, c'est parfaitement raisonnable pour un nouveau programmeur confondre. Les différences entre les 2 versions de MinGW sont entièrement basées sur des concepts qui un nouvel utilisateur ne serait pas comprendre.
Vous devez vous connecter pour publier un commentaire.
SJLJ et SEH sont deux différents exception des systèmes de manutention.
Pour les différences spécifiques, les ressources que vous avez déjà vu tout couvrir.
Cependant, comme pour ce qui est mieux à installer,
aller avec SJLJ, sauf si vous savez que vous avez besoin de la SEH.2019 mise à Jour: Sur les systèmes modernes, il n'y a pas de raison d'utiliser SJLJ, de sorte que les conseils ci-dessus devrait probablement être retourné. SEH est plus commun aujourd'hui. Mais à la fin, il n'a pas vraiment d'importance, car il est facile de basculer entre les deux.
SJLJ
SJLJ est plus largement pris en charge à travers les architectures, et est plus robuste. Aussi, SJLJ des exceptions peuvent être jetés par les bibliothèques qui utilisent d'autres exception des systèmes de manutention, y compris les bibliothèques C. Cependant, il a une perte de performance.
SEH
SEH est beaucoup plus efficace (pas de perte de performances), mais, malheureusement, n'est pas bien pris en charge. SEH exceptions cause de mauvaises choses qui se passera quand jeté à travers les bibliothèques qui n'utilisent pas la SEH.
Aussi loin que votre code est concerné, il n'y a pas de réelles différences. Vous pouvez toujours passer des compilateurs plus tard, si besoin.
J'ai découvert une différence entre SJLJ et SEH la gestion des exceptions dans MinGW-w64: C les gestionnaires de signaux mis par le signal() la fonction ne fonctionnent pas dans SJLJ version dès qu'au moins un try{} bloc est exécuté au moment de l'exécution. Étant donné que cette question ne semble pas être décrit n'importe où, je suis le mettre ici pour l'enregistrement.
L'exemple suivant (test_signals.cpp) le démontre.
Construit avec:
La sortie attendue est:
La sortie réelle lorsque je construis avec MigGW-w64 SJLJ variante est:
L'application est résilié en silence après un certain délai. C'est, gestionnaire de signal n'est pas appelé. Si try{} bloc est commenté, gestionnaire de signal est appelée correctement.
Lors de l'utilisation de MinGW-w64 SEH variante, il se comporte comme prévu (gestionnaire de signal est appelée).
Je n'ai pas d'idée claire de la raison pour laquelle ce problème se produit, ce sera reconnaissant si quelqu'un peut donner une explication.