IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

L'expression "Gérer une exception" est elle à prendre au pied de la lettre ?


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 109
    Points
    109
    Par défaut L'expression "Gérer une exception" est elle à prendre au pied de la lettre ?
    Bonjour !
    L éxecution d'un bloc "try" est elle plus lente que celle du meme bloc non préfixé en cas de non lancement d'exception ?
    Si non est il commun que le mecanisme des exceptions soit utilisé de manière locale afin d'éviter de tester de manière systematique la possibilité qu un truc super-rare n'arrive ?
    Hmmm est ce son role finalement en deça de la propriete magique de remontage de pile d appel ?
    J'ai la bizarre impression de trouver que l'eau ca mouille mais bon il n y a pas de question idiote il parait.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par BaygonV Voir le message
    Bonjour !
    L éxecution d'un bloc "try" est elle plus lente que celle du meme bloc non préfixé en cas de non lancement d'exception ?
    Si non est il commun que le mecanisme des exceptions soit utilisé de manière locale afin d'éviter de tester de manière systematique la possibilité qu un truc super-rare n'arrive ?
    Hmmm est ce son role finalement en deça de la propriete magique de remontage de pile d appel ?
    J'ai la bizarre impression de trouver que l'eau ca mouille mais bon il n y a pas de question idiote il parait.
    Plusieurs réponses

    1) oui, un bloc try qui ne lance pas d'exception est probablement plus lent qu'un bloc équivalent sans try. D'autant plus que les programmes qui plantent sont souvent très rapides.

    2) dès lors qu'on met un try-catch, on est dans le domaine du local. SInon, on ne met pas de try-catch et on apprécie la pleine vigueur de la fonction abort() qui est appelée dès lors qu'une exception n'est pas récupérée dans un programme. Donc, de fait, le mécanisme des exceptions est systématiquement utilisé de manière locale. Et il sert effectivement à ne pas écrire de code de traitement d'erreur un peu partout, ce qui au final permet de nettement simplifier le code. Bien sûr, ça vient aussi avec un défaut ennuyeux : le code peut jumper dans un handler d'exception de manière assez impromptue, et ce n'est guère visible lorsqu'on le lit. Du coup, les exceptions permettent d'un coté de simplifier le code, et de l'autre rende sa lecture et sa compréhension plus complexe - a moins qu'on assortisse le code d'avertissement du style "ici, on ne traite pas de code d'erreur. On les disperse, on les éparpille façon puzzle. Et on récupère tout ça dans des handler d'exception". Bien sûr, on peut faire plus sain comme commentaire. L'idée est que si il est connu que le code lance et traite des exceptions, alors sa lecture est quand même simplifiée par rapport à "un coup je traite des codes d'erreurs, un autre coup je traite des exceptions".

    3) c'est à toi de leur donner un rôle. Par défaut, les exception n'ont pas de rôle prédéfini. Charge à toi de leur en trouver un qui allie élégance, efficacité et sécurité.

    4) oh, je te rassure. Il semblerait que les exceptions soient l'une des choses les plus complexe à appréhender en ce bas monde.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    1) oui, un bloc try qui ne lance pas d'exception est probablement plus lent qu'un bloc équivalent sans try.
    Sous Unix la technique habituelle (au moins celle demandée par l'ABI commune, et d'autres ABI utilisaient la même technique avant, elle était déjà utilisée dans d'autres langages avant que le C++ n'ait des exceptions) fait qu'avoir un bloc try ou pas s'il n'y a pas d'exception n'a un coût qu'indirect (le code devrait être presque le même, il y a des optimisations qui ne peuvent pas traverser les limites du blocs et des entrées supplémentaires dans des tables et donc une occupation plus grande de la mémoire et un risque de résonance de cache -- mais il y aussi une chance que ça en supprime).

    Ma compréhension est que sous Windows -- mais je ne connais Windows que de seconde main -- la technique habituelle est de s'interfacer avec un mécanisme d'exception aussi utilise par l'OS et qui fait que l’entrée et la sortie d'un bloc try ont un coût fixe, indépendamment du fait que des exceptions sont jetées ou pas.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    À ma connaissance, sur x86, un bloc try a le même coût qu'un bloc contenant une ou plusieurs variables avec destructeur (les deux se basant en fait sur le même mécanisme sous-jacent pour s'assurer que les destructeurs sont appelés en cas d'exception).

    Seul un niveau d’imbrication n'ayant ni l'un ni l'autre ne paye pas cette "taxe".

Discussions similaires

  1. Gérer une Exception
    Par MASSAKA dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2007, 10h25
  2. Ne pas gérer une exception
    Par flames dans le forum Langage
    Réponses: 1
    Dernier message: 06/05/2007, 16h48
  3. error 80020009 une exception s'est produite
    Par Riouxe21 dans le forum ASP
    Réponses: 6
    Dernier message: 21/12/2004, 11h01
  4. erreur Une exception s'est produite
    Par unix27 dans le forum ASP
    Réponses: 5
    Dernier message: 23/11/2004, 02h38
  5. erreur :"une exception s'est produite"
    Par leborg dans le forum ASP
    Réponses: 11
    Dernier message: 02/03/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo