{{tag>dev c cpp profilage}}
====== Profilage du code avec grpof ======
Des programmes sont dédiés à l'optimisation du code on parle de profilage du code.
Dans quels cas optimiser?
* Si le programme est instable
* Si le programme apparaît comme trop lent
* pour la beauté du geste, la compréhension, la curiosité
Dans quels cas éviter:
* L'optimisation n'est pas forcement judicieuse si le programme donne satisfaction et s’exécute normalement.
* Ne pas dépenser trop de temps à l’optimisation si l’exécution est acceptable: maigres gains en rapport à l'investissement en temps
* Ne pas profiler tout le programme mais procéder par fonction.
Recommandations codage en C
* Ne pas évaluer des condition avec des variables non initialisées
* Créer et détruire les objets
* Allocation mémoire = libération
**gprof** est inclus au paquet **binutils**, il permet d'analyser le code s’exécutant et fournit des informations sur:
* Le nombre d'appels de chaque fonctions.
* Le temps d’exécution d'une fonction.
Il faut compiler en utilisant l'option **-gp**
gcc -pg -g -std=c99 main.c -o mon-exec
Une fois le binaire créé, lancer une fois l’exécution du programme, dans le dossier conteneur un fichier gmon.out est crée.
./mon-exec
# Exécuter gprof avec l'option -b (brief) et en argument l’exécutable avec le fichier gmon.out
$ gprof -b hello-gprof gmon.out
Sur la sortie standard, on obtient alors:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
84.96 0.48 0.48 1 484.25 484.25 init2
15.93 0.58 0.09 1 90.80 90.80 init1