2009-03-01 9 views
10

Je remarque sur la même machine, que C# prend beaucoup moins de temps que C++ pour compiler. Pourquoi?Pourquoi C# compile-t-il beaucoup plus vite que C++?

NOTE1: Je n'ai effectué aucun test de performance scientifique.

NOTE2: Avant que quelqu'un ne dise que ce n'est pas lié à la programmation, je suis en train d'implémenter un analyseur, je trouve ce que je peux faire dès le départ pour augmenter la vitesse de compilation. REMARQUE: J'ai une question similaire Why do compilations take so long?. Cette question pose la différence spécifique de C/C++ à C#. Il est évident qu'un langage simple serait plus rapide à compiler qu'un langage complexe, mais C et C# sont des langages complexes.

mes plats à emporter: 1) C/C++ est lent à partir du préprocesseur et des en-têtes. 2) beaucoup d'en-têtes provoque beaucoup plus de données à analyser. surtout quand chaque fichier peut utiliser le préprocesseur peut modifier le code 3) C# reportent une compilation au programme de démarrage 4) instructions IL sont simples, la machine n'est pas

+0

Je dois me demander si vous avez lu les réponses à votre question précédente sur ce sujet: http://stackoverflow.com/questions/588884/why-do-compilations-take-so-long –

+0

oui j'ai. Cette question se concentre sur la différence spécifique de c à C# –

+0

ceux qui sont appelés spécifiquement dans cette réponse ... ce sont les choses C++ qui fait la différence, rien de spécial que C# – ShuggyCoUk

Répondre

2

Parce que C++ compile à code machine, tandis que C# code octet. Avez-vous remarqué le lag lorsque vous démarrez votre programme .NET. C'est quand le code d'octet est JITé (compilé en code machine).

+0

Il y a beaucoup plus à cette question que cela cependant. –

+1

Delphi se compile aussi en code machine, et c'est plus rapide que C#, ce qui n'est pas le cas. – Arafangion

+1

le problème majeur est la source, pas la cible. – peterchen

0

Je pense que c'est probablement à cause de l'AMOUNT d'analyse qu'il doit faire, plutôt que de la vitesse de l'analyseur lui-même. En général, C++ utilise le préprocesseur C, qui extrait de nombreux fichiers include (comme d'autres l'ont suggéré, et l'autre question contient de nombreuses réponses similaires). Cela gonfle la quantité de code à analyser.

Donc, si vous êtes en les comparant à des fins d'écrire un analyseur syntaxique ... apprendre que vous ne devriez pas avoir de style .h inclure des fichiers :)

5

Il y a deux questions distinctes à prendre en compte - le nombre de phases de traitement, et la complexité du ciblage.

Une compilation C++ typique implique un certain nombre de phases (bien que celles-ci puissent être exécutées simultanément) où le préprocesseur gère les directives et les macros, puis le compilateur C++ traite lui-même le code résultant. Il est assez commun pour le préprocesseur de générer une sortie beaucoup plus grande, du code qui doit être analysé et traité par le compilateur. De plus, gardez à l'esprit que le compilateur C++ ciblera le langage machine x86 ou x64 - en traitant toute l'optimisation à l'avance et en essayant de tirer le meilleur parti du matériel qui n'est pas vraiment optimisé au niveau du développement OO.

En revanche, le compilateur C# cible Microsoft Intermediate Language (MSIL), une plate-forme de niveau machine de niveau supérieur conçue pour être utilisée pour le développement OO. La plupart des constructions fournies par C# sont directement mappées dans les instructions IL, ce qui facilite grandement la compilation. Un tronçon juste d'optimisation et d'autre activité est différé jusqu'au démarrage du programme réel, à quel point il est optimisé pour la machine disponible exacte.

Questions connexes