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 :

Est-ce que c++ est vraiment plus lent que c [Débat]


Sujet :

C++

Vue hybride

r0d Est-ce que c++ est vraiment... 25/02/2005, 12h49
moldavi Beaucoup de jeux vidéos sont... 25/02/2005, 13h10
r0d aouimélà attention!!... 25/02/2005, 13h14
moldavi Pour l'affichage, je suis... 25/02/2005, 13h17
r0d Je suis d'accord, mais... 25/02/2005, 13h30
Aurelien.Regat-Barrel Difficile de se prononcer.... 25/02/2005, 13h44
Luc Hermitte Il y a déjà des fils qui en... 25/02/2005, 13h45
Invité Pas évident .....je suis... 25/02/2005, 14h36
Ti-R C et C++ c la même chose !!!... 25/02/2005, 14h36
Aurelien.Regat-Barrel Hum... là dessus C++ est plus... 25/02/2005, 14h40
mtopoloff Plus lent, moins lent, la... 25/02/2005, 14h46
r0d Et bien justement, je suis... 25/02/2005, 14h47
mchk0123 T'as pas pensé à comparer les... 16/03/2007, 23h51
mtopoloff Ben tu tu arrives a... 25/02/2005, 15h03
Invité là ce sont des problèmes... 25/02/2005, 15h06
tut mais on diverge... la... 25/02/2005, 15h54
Ti-R Je voulais dire que l'appel... 25/02/2005, 15h56
Invité Il est préférable de... 25/02/2005, 16h22
Luc Hermitte C'est le même compilateur. Il... 25/02/2005, 16h28
Ti-R J'ai pas dit qu'il fallait... 25/02/2005, 16h30
r0d Et qu'en est-il des fonctions... 25/02/2005, 16h51
philippe V pour :: est-ce-que le C est... 25/02/2005, 16h56
Ti-R inline peut permettre ou pas... 25/02/2005, 17h10
Luc Hermitte Le problème n'est pas de... 25/02/2005, 17h31
Troll Honnêtement je pense que tu... 25/02/2005, 20h39
scifire Bonsoir a tous , je vous... 25/02/2005, 21h40
dvsoft Bonsoir, Grand débat que... 26/02/2005, 00h53
Ti-R Je pense que tout dépend du... 26/02/2005, 02h59
Aurelien.Regat-Barrel C'est généralement ce qu'on... 26/02/2005, 16h53
Invité Pour être horrible c'est... 26/02/2005, 19h54
dvsoft bonsoir const int... 26/02/2005, 21h57
Ti-R A quoi cela sert et dans quel... 26/02/2005, 23h03
Aurelien.Regat-Barrel Le débat tourne autour des... 26/02/2005, 23h43
JolyLoic Pour revenir à la question... 27/02/2005, 10h26
mchk0123 Presque entièrement d'accord,... 17/03/2007, 00h07
IrmatDen A voir le post et le sujet... 17/03/2007, 00h16
dvsoft bonjour Bonne question de... 27/02/2005, 12h00
MoLysS Bon alors pour essayer de... 19/12/2005, 19h22
Blustuff Théoriquement non,... 14/08/2006, 00h43
rulianf Savoir si le C est plus... 14/08/2006, 12h07
Luc Hermitte Je suis d'accord que ce débat... 14/08/2006, 13h02
mchk0123 Surement moins d'impact que... 17/03/2007, 00h28
zais_ethael Bon, je crois qu'on a tous... 17/03/2007, 13h44
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Je suis d'accord que ce débat est un faux débat. Mais aussi pour d'autres raison. Ta phrase me rappelle le débat sur le coût révé de la virtualité, que l'on a peut-être déjà abordé ici d'ailleurs. Le truc est que l'on paye pour les fonctionnalités que l'on utilise. Après, il faut voir de quelles fonctionalités on a besoin.

    Juste une précision supplémentaire. Objet ne veut pas dire polymorphisme d'inclusion à tous les coins de rue. On n'est pas obligé d'hériter et d'introduire la liaison tardive parce que l'on veut écrire des objets. Cf ce qui dérive directement de la STL (j'écarte donc les flux propres à la SL). 0 héritage, 0 polymorphisme d'inclusion. Et pourtant 100% C++, 0% C.

    Concernant les biblios mathématiques, la référence initale, ce sont les BLAS du Fortran. On trouve des adaptations C qui vont avoir de bonnes perfs, mais une interface de manipulation peu pratique. Et on trouve des biblios C++ qui rajoutent une expressivité "mathématique" tout en maintenant d'excellentes perfs. Dans le passé, on avait Blitz++ qui réalisait une utilisation intensive de méta-programmation template pour éliminer les temporaires, ... Visiblement, blitz++ ne semble pas se préoccuper des problèmes de pipeline aussi efficacement que d'autres biblios. Qu'à cela ne tienne, on a des alternatives construites sur la même philo que blitz++ qui savent encapsuler des biblios C à la BLAS.
    En fait, pour le côté mathématique, la sémantique de valeur inhérente aux objets mathématique fait que l'on evite naturellement tout ce qui concerne le polymorphisme d'inclusion.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par rulianf
    En effet (et par exemple) la création et la destruction d'objets plus ou moins polymorphes impliquent les appels respectifs à tous les constructeurs et destructeurs de tous les parents de l'objet en question mais aussi à ses propres méthodes de construction et de destruction...
    Surement moins d'impact que tu ne le penses sur la différence C/C++.
    Tu perd en temps d'appel entre les différents const./dest. mais c'est mineur sur les CPU d'aujourd'hui (bien moins qu'un branch misprediction).

    Ce qui est sur c'est que si tu est accroc aux méthodes virtuelles, aux constructeurs de copies et que tu ne pratique jamais le passage d'objets par référence, ... aie aie aie ... Ca peut faire mal.

    Donc je serais tenté de dire que plus tu utilises un langage abstrait, plus tu à de décisions (correctes) d'implémentation à prendre car tu auras toujours plus de combinatoire pour faire la même chose que si tu utilises un langage plus proche du bit code.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Bon, je crois qu'on a tous compris que le C++ n'est pas lent en lui même et qu'un code C compilé avec un compilo C++ produira exactement le même résultat.
    Je vais prendre un petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int vecc[N];
    vector<int> veccpp(N);
     
    for(int i=0;i<N;i++)
       vecc[i]++;
    for(int i=0;i<N;i++)
       veccpp.at(i)++;
    A priori ces deux codes sont similaires, sauf que la fonction at() de vector vérifie systématiquement si la taille de vecteur et renvoie une exception si elle est dépassée. Donc si N=10 000, cela fera 10 000 vérifications inutiles puisque on sait très bien qu'on ne dépassera pas la taille de ce vecteur (oui, les gourous de la stl me diront qu'on peut utiliser l'opérateur [] qui ne fait pas cette vérification ou encore des itérateurs, mais c'est pour illustrer et j'avais pas d'autre exemple en tête ).
    C'est inévitablement plus lent, c'est une des conséquences quand on fait des classes "super-safes, où tout est toujours libéré correctement, où rien ne peut jamais se retrouver dans un état incohérent à quelque instant que ce soit". Pour généraliser on pourrait même énoncer une loi du style: toute abstraction entraine une perte d'optimisation.
    Ce n'est pas forcément lié au C++, pour reprendre notre exemple il existe aussi des biblios pour faire des tableaux plus sécurisés en C. Le C++ se distingue juste parceque cela est plus facile, plus naturel.

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par mchk0123
    Donc je serais tenté de dire que plus tu utilises un langage abstrait, plus tu à de décisions (correctes) d'implémentation à prendre car tu auras toujours plus de combinatoire pour faire la même chose que si tu utilises un langage plus proche du bit code.
    Je précise ce que j'ai dit :

    Plus un langage à une puissance d'expression etendue (ce qui le cas de C++ par rapport à C, car il ajoute des concepts sans en enlever), plus il y à de combinaisons possible pour implémenter un processus donnant le même résultat.
    Du coup on à plus de décisions correctes à prendre ...

    ... Donc plus de probabilitée d'écrire du code peu optimisé si on y fait pas attention.

Discussions similaires

  1. Réponses: 184
    Dernier message: 23/10/2013, 00h57
  2. [RAM] la vitesse de ma mémoire est incorrecte, plus lente que avant.
    Par clavier12AZQSWX dans le forum Composants
    Réponses: 3
    Dernier message: 24/02/2013, 10h02
  3. Pourquoi mon code est plus lent que Arrays.sort
    Par alexis779 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2006, 12h44
  4. Tri : MergeSort est-il bcp plus lent que Quicksort ?
    Par phplive dans le forum Langage
    Réponses: 5
    Dernier message: 23/02/2006, 16h28
  5. DBExpress est plus lent que BDE?
    Par palassou dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 08h39

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