Que signifie le tas ?

Que signifie « Dans fichier [tas] » ?

Cela signifie que Sysprof pense qu’une fonction a été appelée depuis un endroit du tas du programme (où malloc alloue la mémoire) plutôt que depuis la section de code (où le code exécutable réside normalement). Il y a plusieurs explications possibles.

Compilateurs JIT (Just in Time, juste-à-temps en français)

Des langages comme Java peuvent générer du code exécutable pendant l’exécution d’un programme et le stocker dans le tas. Dans ce cas, Sysprof rend compte avec précision de la situation.

Optimisation des compilateurs

Les compilateurs C et C++ peuvent optimiser les informations nécessaires pour déterminer l’appelant d’une fonction, de sorte qu’il est confondu avec le [tas]. Il est toujours possible de connaître la fréquence d’appel de chaque fonction, mais pas toujours son endroit d’appel.

Pour gcc, le drapeau -fno-omit-frame-pointer évite cette optimisation. Le drapeau n’est pas toujours nécessaire, et n’est par exemple requis que pour l’optimisation -O3 sur les architecture x86_64.

Pour avoir un graphe d’appels le plus détaillé et précis possible à partir de code non optimisé, utilisez ces drapeaux : -ggdb -fno-omit-frame-pointer -O0