2009-10-01 4 views
1

Supposons que j'ai un cours assez complexe sur lequel je travaille. La moitié des méthodes sont faites et testées, mais je dévile encore l'autre moitié. Si je mets le code fini dans un cpp et le reste dans un autre cpp, Visual Studio (ou tout autre IDE d'ailleurs) compilera-t-il plus vite quand je changerai seulement le code qui est dans le cpp de «work-in-progress»?Le découpage du code en plusieurs .cpps diminuera-t-il le temps de compilation?

Merci!

+0

Je pense, vous devez lire ce fil - http://stackoverflow.com/questions/364240/how-do-you-reduce-compile-time-and-linking-time-for-visual-c-projects -native – adatapost

+0

Comme les autres affiches l'ont fait remarquer, il faudra probablement compiler plus vite, mais je doute que vous remarquerez la différence. Mais pourquoi ne pas simplement l'essayer (cela devrait être fait rapidement) et rapporter vos expériences ici :-) ... – MartinStettner

Répondre

1

Cela dépend vraiment. Pour un très gros projet, le temps de liaison peut souvent être considérablement plus élevé que le temps de compilation d'un seul fichier. Dans notre base de code au travail (un jeu basé sur Unreal Engine) nous avons trouvé que faire des fichiers "bulk.cpp" qui incluent de nombreux autres fichiers (en fait moins d'unités de traduction) diminue considérablement le temps d'exécution.

Même si le temps de compilation individuel pour une petite modification a été augmenté, le temps de compilation global (reconstruction complète) et le temps de liaison (qui arrive même pour un petit changement) ont diminué de façon spectaculaire.

+0

c'est ce qu'on appelle la construction de l'unité –

+1

Le moteur Unreal utilise la terminologie "Bulk Build" de sorte que la terminologie est très commune dans l'industrie du jeu, mais "Unity Build" est la même chose. J'ai aussi entendu le terme "Uber-Build" mais pas aussi souvent. En plus de la diminution évidente du temps global du préprocesseur, nous constatons une diminution significative du temps de Linker (plusieurs minutes), en particulier dans le code lourd comme Unreal Engine. Un avantage secondaire de Bulk/Unity Builds est que votre code peut s'exécuter plus rapidement (de plus gros morceaux de code permettent au compilateur d'optimiser mieux - en particulier pour la fonction Inline). – Adisak

0

Tant que le fichier d'en-tête ne change pas (en supposant que les deux .cpp incluent le même en-tête), seuls les fichiers .cpp modifiés seront compilés.

Cela est vrai pour la plupart des IDE. Je n'ai pas eu l'expérience d'appeler directement des compilateurs comme gcc, donc je ne peux pas commenter cela.

2

Oui, je crois que Visual Studio compile de manière incrémentielle, donc tant que vous cliquez sur Construire et non sur Reconstruire tout, vous devriez obtenir des temps de compilation plus courts en les séparant.

Cependant, vous devriez vraiment vous séparer en raison de raisons d'affacturage de code, c'est-à-dire que chaque classe devrait avoir un seul but, etc. etc ... Je suis sûr que vous le savez.

0

La réponse est probablement oui car vous effectuerez probablement des builds incrémentielles (en ne compilant que le .cpp qui change) et des en-têtes précompilés. Si vous n'utilisez aucune de ces fonctionnalités, vous aurez des versions plus lentes. Je suis assez sûr qu'un projet Visual Studio C++ par défaut utilise à la fois des générations incrémentielles et des en-têtes précompilés.

0

Oui, ce sera plus rapide. Mais surtout: Ne vous inquiétez pas, si votre classe est si grande que cela prend beaucoup de temps sur un processeur moderne, c'est la façon de dieu de dire que votre classe doit être refactorisée en plus petits morceaux.

Questions connexes