{{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