Comment fonctionnent les exceptions dans les coulisses en C
Introduction :
Les exceptions sont souvent remises en question pour leur efficacité. Cet article explore le fonctionnement complexe des exceptions en C pour fournir une compréhension complète de leur processus d'exécution.
Mécanisme de gestion des exceptions :
Les exceptions ne s'apparentent pas directement à des exécutions répétées. les retours ; ils impliquent une couche supplémentaire de tables d’exceptions. Lorsqu'une exception est levée, le compilateur génère un appel à __cxa_throw, qui utilise ces tables pour trouver le gestionnaire et dérouler la pile jusqu'à ce qu'elle atteigne le gestionnaire approprié.
Lancement d'une exception :
Lancer une exception nécessite une surcharge d'exécution importante car :
Retours exceptionnels :
En revanche, le renvoi d'une valeur entraîne une surcharge minime. Les exceptions doivent être utilisées avec parcimonie, uniquement pour des scénarios exceptionnels.
Exemple de code :
Le code C simpliste suivant illustre la génération d'instructions pour la gestion des exceptions :
<code class="cpp">class MyException { public: MyException() { } ~MyException() { } }; void my_throwing_function(bool throwit) { if (throwit) throw MyException(); } void another_function(); void log(unsigned count); void my_catching_function() { log(0); try { log(1); another_function(); log(2); } catch (const MyException& e) { log(3); } log(4); }</code>
Assemblage généré :
La compilation de ce code avec GCC sous Linux a abouti au résultat d'assemblage suivant :
Lancement d'une exception :
_Z20my_throwing_functionb: ... movl , (%esp) call __cxa_allocate_exception ... movl %eax, (%esp) call __cxa_throw ...
Tableau de gestion des exceptions :
.section .gcc_except_table,"a",@progbits .LLSDATT9: ... .uleb128 .LEHB1-.LFB9 .uleb128 .LEHE1-.LEHB1 .uleb128 .L12-.LFB9 .uleb128 0x1 ...
Conclusion :
Les exceptions nécessitent des frais généraux pour la manipulation et le déroulement, tandis que les valeurs de retour entraînent des dépenses minimes. Les exceptions sont optimales pour des scénarios exceptionnels, mais doivent être utilisées judicieusement pour éviter une dégradation des performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!