Les exceptions en C sont-elles toujours lentes ?
L'affirmation d'Andrei Alexandrescu selon laquelle les exceptions en C sont très lentes a soulevé des inquiétudes quant à leur efficacité en C 98. Cependant, le modèle actuel de gestion des exceptions, connu sous le nom d'exceptions du modèle à coût nul, résout ce problème.
Dans le modèle à coût zéro modèle, le compilateur crée une table secondaire qui mappe les points où des exceptions peuvent être levées à une liste de gestionnaires. Lorsqu'une exception se produit, cette table est utilisée pour déterminer le gestionnaire approprié et dérouler la pile. Ce processus est nettement plus rapide que la vérification explicite des exceptions à chaque étape.
Par rapport à la stratégie traditionnelle en cas d'erreur, le modèle Zero-Cost :
Cependant, la mesure des performances peut être difficile en raison de facteurs tels que les échecs de cache et la surcharge RTTI.
Ralentir sur le chemin exceptionnel
Malgré les améliorations d'efficacité, les exceptions restent lentes sur le chemin exceptionnel. Cependant, cela est généralement contrebalancé par leur avantage en termes de vitesse par rapport aux vérifications explicites sur la majorité des chemins de code.
Lisibilité par rapport aux performances
Indépendamment des considérations de performances, la lisibilité du code doit être prioritaire. Des exceptions doivent être utilisées lorsque l'appelant ne peut pas ou ne souhaite pas gérer les échecs localement. Cependant, la norme C 11 autorise des références vérifiées qui offrent une approche plus contrôlée de la gestion des exceptions.
Conclusion
Bien que les exceptions ne soient pas incroyablement rapides, leur impact sur les performances est minime par rapport aux avantages qu’ils apportent en termes de lisibilité et d’organisation du code. Les développeurs doivent donner la priorité à la clarté du code et à la facilité de maintenance plutôt qu'aux problèmes d'optimisation prématurés.
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!