113 votes

Le langage C est-il plus rapide que le langage C++ ?

Pour autant que je sache, tous les langages de script et les programmes scientifiques de base sont généralement écrits en C, ce qui rend la mise en œuvre compliquée mais, d'une certaine manière, directe.

Je comprends que ces personnes souhaitent maximiser leurs performances, mais y a-t-il une réelle différence entre l'utilisation de chaînes et de structures en C et l'utilisation de classes en C++ ? Le C++ semble fonctionner de la même manière, à l'exception des fonctions virtuelles, il stocke une fonction de classe une seule fois et chaque instance de cette classe appelle cette fonction unique.

Qu'est-ce qui rend le C plus rapide et est-ce une différence notable dans un projet tel que python ou sqlite qui doivent être les plus rapides ?

92voto

Potatoswatter Points 70305

Le C++ est souvent utilisé pour les programmes scientifiques. La popularité du C est peut-être en train de s'estomper dans ce domaine. Fortran reste populaire en tant que langage de "bas niveau".

En C++, "vous ne payez que ce que vous utilisez". Il n'y a donc rien qui puisse le rendre plus lent que le C. En particulier pour les programmes scientifiques, les modèles d'expression permettent d'effectuer une optimisation personnalisée en utilisant le moteur de modèles pour traiter la sémantique du programme.

La raison pour laquelle le langage C est préféré pour des projets tels que Python est qu'il a tendance à être moins difficile à lire, de sorte qu'une base de code importante sera plus accessible à un plus grand nombre de contributeurs.

SQLite a besoin d'un code exécutable de petite taille, où le C a un léger avantage. L'utilisation judicieuse de C++ permet encore de l'utiliser dans des applications intégrées, mais il est moins populaire en raison de la crainte que des caractéristiques indésirables du langage ne se glissent dans le code.

39voto

Je ne pense pas que la raison soit tant liée à la performance qu'à l'interopérabilité. Le langage C++ est plus complexe que le langage C, mais du point de vue des performances, il ne devrait pas y avoir de différence notable. Certaines constructions C++ sont plus rapides que leur équivalent C ( std::sort est plus rapide que qsort ) et il existe probablement de bons exemples de l'inverse.

EDIT : En ce qui concerne l'interopérabilité...

Fondamentalement, la norme C++ ne définit pas certaines choses qui pourraient être nécessaires pour faciliter l'interopérabilité entre les binaires créés avec différents compilateurs/versions. Le problème le plus notable est la convention de dénomination des symboles dans le binaire. En C, le langage définit une correspondance unique entre chaque symbole du code et le nom du symbole binaire. Une fonction appelée my_function créera un symbole dans le fichier binaire appelé my_function . D'autre part, et en raison de caractéristiques telles que la surcharge des fonctions, les noms des fonctions C++ doivent être mutilé (traduits en différents symboles de fonction dans le code binaire, codant les types des arguments et des types de retour), et la norme ne définit pas la manière dont le découpage est effectué. Cela signifie que la même fonction en C++ peut être compilée en différents symboles en fonction du compilateur (à moins que extern "C" est utilisé pour forcer l'interopérabilité C pour ces fonctions en C++).

En fin de compte, l'interface entre le langage de script et le code natif devrait de toute façon être une interface C, même si les détails de l'implémentation interne pourraient être en C/C++/tout autre langage natif.

(Le C++ est vraiment puissant, mais il est aussi un peu effrayant car c'est un langage beaucoup plus complexe que le C, et certaines choses que le C++ n'est pas en mesure de faire, ne le sont pas. regarder simple peut avoir un impact sur la performance)

19voto

outmind Points 326

Comme Bjarne l'a mentionné dans [D&E], l'efficacité est l'un des principaux objectifs du C++. Le C++ n'est donc plus lent que lorsque le programmeur utilise ses fonctions "supplémentaires", comme les fonctions virtuelles que vous avez mentionnées, les informations rtt, etc.

Je pense donc qu'il s'agit plutôt de raisons psychologiques - le C est utilisé parce qu'il ne permet pas d'utiliser les fonctions "lentes" du C++.

12voto

fortran Points 26495

Les langages ne sont pas intrinsèquement plus rapides ou plus lents, les interprètes et les compilateurs peuvent être plus ou moins efficaces.

En outre, les langages de plus haut niveau fournissent des couches d'abstraction qui ont généralement un coût d'exécution. Si vous ne les utilisez pas, le compilateur peut être assez intelligent pour les supprimer, mais ce n'est pas toujours possible si la sémantique du langage ne permet pas de le faire en toute sécurité... Et si vous en avez besoin, les implémenter vous-même dans un langage de plus bas niveau sera probablement plus lent que d'utiliser le langage "lent".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X