J'ai tendance à écrire plutôt grandes basé sur un modèle d'en-tête uniquement bibliothèques C++ et mes utilisateurs se plaignent souvent sur les temps de compilation. Après avoir réfléchi à la question, il m'est apparu que je n'ai aucune idée de l'endroit où le temps va. Est-il un moyen simple pour le profil de la compilation C++ processus communs, de compilateurs, tels que g++, cpi, et xlC? Par exemple, est-il possible de se faire une idée de la façon dont beaucoup de temps est passé à l'intérieur de chacune des phases de la compilation C++ ?
Réponses
Trop de publicités?Pour gcc/g++ il y a des options de débogage pour trouver how much time is spent within each of the phases of C++ compilation?
-Q Fait le compilateur imprimer chaque nom de fonction comme il est compilé, et imprimer des statistiques sur chaque passe quand il se termine.
-ftime-rapport Fait le compilateur imprimer des statistiques sur le temps consommé par chaque passe quand il se termine.
Vous pouvez poster de sortie de g++ compilation du fichier source unique avec -v -ftime-report
ici pour en discuter. Les Passes sont décrites dans GCCINT: 9 Passe et les Fichiers du Compilateur
Il y a un outil de l'augmentation de projet dans l'un des questions pertinentes.
De toute évidence, il exige de code source avec l'instrumentation TEMPLATE_PROFILE_ENTER()
et TEMPLATE_PROFILE_EXIT()
macro appels. Ces macros, puis générer des diagnostics spécifiques (avertissements) au moment de la compilation, qui sont chronométrées et collectées avec l'instanciation des piles d'appels (qui a pour conséquence de permettre la construction et la visualisation de callgraphs). Pas mal, de l'OMI.
Je n'ai pas encore bien.
Vous pouvez les séparer dans une certaine mesure (je suis en supposant make
)
- ajouter une règle de génération que seuls les pré-traite les fichiers (à l'aide de l'
-E
switch), et un.PHONY
de la cible, qui dépend du préprocesseur fichiers de sortie tout comme le binaire normal cible dépend.o
fichiers. De mesurer combien de temps il faut pour construire cette cible - ajouter un
'PHONY
de la cible qui dépend de l'.o
fichiers mais n'a pas de lien entre eux. De mesurer combien de temps il faut pour construire cette cible (de nettoyage) - de mesurer combien de temps il faut pour faire une nouvelle version de l'habitude binaire
Maintenant vous avez une idée de combien de temps il faut pour pré-traiter, compiler et lier. Vous pouvez également comparer optimisés et non optimisé (-O0
) des versions de deuxième et troisième cible, pour voir combien de temps est consacré à l'optimiseur.