Dernier caractère d'une chaîne en PHP : 5 méthodes simples et erreurs fréquentes

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi est-il important de profiler du code C++ ?

\n

Le C++ est l’un des langages de programmation les plus rapides, mais même avec lui, vous pouvez écrire du code lent. Les développeurs passent souvent des heures à optimiser les mauvaises parties d’un programme en se basant sur l’intuition. Le profilage est une approche scientifique de l’optimisation : vous mesurez où le programme passe le plus de temps et vous améliorez ces zones de manière ciblée.

\n

Pour les programmeurs C++ débutants, le profilage peut sembler complexe, mais les outils de base peuvent être maîtrisés en une soirée. Dans cet article, nous aborderons trois outils populaires : gprof, perf et Valgrind, et nous apprendrons à interpréter leurs résultats.

\n\n

Qu’est-ce que le profilage et quelles méthodes existent ?

\n

Le profilage est la collecte de données sur le fonctionnement d’un programme pendant son exécution. Il existe deux approches principales :

\n
    \n
  • Profilage par instrumentation — des "sondes" spéciales sont ajoutées au code du programme (ex. gprof). Inconvénient : cela ralentit l’exécution du programme.
  • \n
  • Profilage par échantillonnage — à intervalles réguliers, il "jette un coup d’œil" dans le programme et enregistre quelle fonction est en cours d’exécution (ex. perf). Cela ne ralentit quasiment pas le programme.
  • \n
\n

Il existe également des outils pour trouver les fuites mémoire (Valgrind) et l’analyse du cache. Pour commencer, il suffit de maîtriser gprof et perf.

\n\n

Outil 1 : gprof — le profileur classique

\n

gprof est un profileur intégré pour GCC. Il fonctionne en deux étapes : collecte des données et analyse.

\n

Comment utiliser gprof

\n

D’abord, compilez le programme avec le drapeau -pg :

\n
g++ -pg -o my_program my_program.cpp
\n

Exécutez le programme :

\n
./my_program
\n

Après l’exécution, un fichier nommé gmon.out apparaît. Lancez maintenant gprof :

\n
gprof my_program gmon.out > report.txt
\n

Ouvrez report.txt et regardez le tableau :

\n
Flat profile:\nEach sample counts as 0.01 seconds.\n  %   cumulative   self              self     total\n time   seconds   seconds    calls  ms/call  ms/call  name\n 60.00      0.06     0.06    10000     0.01     0.01  slow_function\n 30.00      0.09     0.03     5000     0.01     0.02  medium_function\n 10.00      0.10     0.01        1    10.00    10.00  main
\n

La colonne % time montre le pourcentage de temps pris par la fonction. Dans notre exemple, slow_function est le principal candidat à l’optimisation.

\n

Conseil : Pour les petits programmes, gprof fonctionne très bien. Pour les grands projets, il peut donner des données inexactes en raison des optimisations du compilateur.

\n\n

Outil 2 : perf — un échantillonneur puissant pour Linux

\n

perf est un profileur intégré au noyau Linux. Il fonctionne par la méthode d’échantillonnage et ne ralentit quasiment pas le programme. Il est idéal pour les systèmes de production.

\n

Utilisation de base de perf

\n

Compilez le programme avec les symboles de débogage (le drapeau -g) :

\n
g++ -g -o my_program my_program.cpp
\n

Lancez le profilage :

\n
perf record ./my_program
\n

Une fois le programme terminé, visualisez le rapport :

\n
perf report
\n

Vous verrez une interface interactive. En cliquant sur une fonction, vous pouvez voir quelles lignes de code ont été exécutées le plus souvent. Exemple de sortie :

\n
Samples: 1K of event 'cycles'\nEvent count (approx.): 250000000\nOverhead  Command      Shared Object     Symbol\n  45.32%  my_program   my_program        [.] slow_function\n  30.15%  my_program   my_program        [.] medium_function\n  12.50%  my_program   libc-2.31.so      [.] malloc\n   8.03%  my_program   my_program        [.] main
\n

Important : perf nécessite des privilèges root pour collecter les données du noyau.

Blogs

Book Recommendations