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

Langage C++ Discussion :

Héritage et performances


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 47
    Points : 36
    Points
    36
    Par défaut Héritage et performances
    Bonjours à tous,

    J'ai de légers doutes à propos de l'héritage en C++. Voilà, je développe une librairie en imagerie pour le support des images. Comme beaucoup le savent, c'est un domaine assez sensible aux performances.

    Pour une image non planaire codée avec des bytes non signés et avec 3 canaux (du RGB par exemple), j'en suis à 5 niveau de hiérarchie :

    Image => NotPlanar => RGB => RGB_C3 => RGB_8U_C3

    Ma question est simple : est-ce que cinq niveaux de hiérarchie peuvent commencer à porter préjudice aux performances ? On parle souvent du fait que le mot-clé "virtual" est coûteux (mais il y a à boire et à manger dans ce mot), mais concrètement, est-il coûteux au point de me porter là aussi un quelconque préjudice dans mon application ?

    Merci,

    Benjamin

  2. #2
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    La complexité de ton arborescence de classes ne "ralentira" que ton compilateur. A l'exécution, le coût d'un d'un appel de méthode virtuelle est fixe et comparable à celui du déréférencement d'un pointeur sur fonction. Si tu tapes le mot clef "VPTR" sous Google, tu trouveras des tas d'informations expliquant le mécanisme d'appel d'une méthode virtuelle.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    La question n'est pas 'est-ce couteux' mais quel est le surcout par rapport à telle autre alternative. Ou pour reformuler si tu mets une usine à gaz pour contourner l'héritage, au final, cette usine à gaz risque d'être moins performante (et évidemment moins robuste/maintenable/évolutive) que la solution à base d'héritage. Donc se méfier des conclusions hâtives de type : l'héritage coute cher donc je m'en passe.

    Sur comment ça fonctionne : Les fonctions virtuelles en C++, Comment ça marche ?

    Sur la problématique des performances :
    Citation Envoyé par Donald Knuth
    "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil"
    Certes l'héritage est directement lié au design et c'est à ce niveau que peuvent se jouer des effets important en terme de perf. Mais qu'est-ce qui va coûter du temps : les données, les algos, le parcours, etc ? Identifie d'abord tes sources de couts à mon avis.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Merci pour vos réponses. Je suis absolument certain de mon design et de mon implémentation. Ayant effectué un apprentissage pas spécialement en profondeur et récent du C++ (mes langages de prédilection étant le C et le Java) il y a certains points flous. Je n'ai pas eu le temps de me renseigner comment les compilateurs traitent l'héritage et le polymorphisme en C++, d'où ma question sur l'héritage. Si les réponses n'avaient pas été aussi optimistes j'aurais tout simplement tenté de faire une hiérarchie avec moins de niveaux.

    Etant donné que le "virtual" n'implique qu'un déréférencement de pointeur de fonction, ça me va .

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Héritage SQL et performances
    Par BigFoot69 dans le forum Décisions SGBD
    Réponses: 17
    Dernier message: 18/04/2014, 17h16
  2. problème de performance en héritage
    Par InfOCynO dans le forum Développement
    Réponses: 3
    Dernier message: 31/10/2012, 16h40
  3. Héritage, destructeurs et performances
    Par Aleph69 dans le forum Langage
    Réponses: 52
    Dernier message: 31/08/2010, 17h36
  4. [MLD] Héritage et performances
    Par ymoreau dans le forum Schéma
    Réponses: 8
    Dernier message: 09/07/2009, 09h35
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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