J'ai besoin d'un profileur de mémoire pour connaître l'utilisation de la mémoire pour chaque fonction. Je sais que Valgrind (massif) mais cela ne me donne pas d'informations sur des fonctions spécifiques (au moins, je ne sais pas comment le faire avec le massif) P>
Connaissez-vous un outil à cet effet sous Linux? P>
Merci! P>
4 Réponses :
Vous voudrez peut-être jeter un coup d'œil à MEMPROF . P>
Merci! C'est une bonne solution!
Si vous voulez simplement obtenir l'emplacement d'où une grande quantité de mémoire est demandée, le moyen le plus simple serait de corriger la fonction voici un exemple de code: p> Vous pouvez très bien modifier ce code pour faire des choses supplémentaires. P> p> MALLOC CODE> ou de créer une nouvelle bibliothèque ayant
MALLOC code> Appelez et suivez la taille de votre
Malloc fonction code>. Je ne parle pas de la mise en œuvre de l'appel Malloc. Ld_preload cette bibliothèque à votre application.
Quiconque a voté, pourriez-vous donner la raison?
Je suis enlevé parce que c'est loin d'être faux.
Merci Jweyrich, mais je me demande toujours pourquoi il a été voté.
@ Vikram.exe Cela ne fonctionnera pas si PrintF (ou une fonction similaire qui appelle en interne MALLOC) est utilisée à l'intérieur de la fonction MALLOC. Comme cela créera une récursion infinie.
Cette information est donnée sous forme d'arborescence d'appels dans chaque instantané détaillé em> sous le graphique dans la sortie massif code> est em> vous montrer quelles fonctions étaient responsables de l'utilisation de la mémoire, tant que vous avez compilé votre programme avec des informations de débogage (
-g code>). Il vous montrera même le numéro de ligne. P>
ms_print code>. La fréquence des instantanés détaillés peut être contrôlée avec l'option
- détaillée-freq code> au massif. Voir Section 9.2.6 du manuel du massif pour plus de détails en lisant les informations détaillées de l'instantané. P>
L'INFORMAION n'est pas trop sympathique (comme d'habitude dans Valgrind), mais il est vrai qu'il fournit des informations sur les fonctions. Il y a un outil (massif Visualizer Kde-apps.org/Content /Show.php/massif+Visualizer?Content=1224 09 ) qui semble résoudre ce problème avec des graphiques colorés. Je n'ai pas encore essayé mais ça a fière allure dans les captures d'écran!
Comme d'autres ont souligné que le massif donne des informations de profilage exhaustives, mais il ralentit considérablement le processus. P>
Une autre option est la TCMALLOC de Google, qui dispose d'un profileur de tas incorrigé qui décharge le graphique des appels avec des allocations (voir http://goog-perfotill.sourceforge.net/doc/heap_profiler.html ), qui peut également être visualisé graphiquement. p>
Vous pouvez le lier au moment de l'exécution avec votre programme avec ld_preload code>, ainsi que la variable
HASPProfile CODE> env active le profileur de tas. P>
Est pour la mémoire de tas. Le code utilise une grosse quantité de données et j'ai besoin de savoir dans la fonction qui l'attribue. Bien que la répartition peut se produire dans une autre fonction, si la fonction A alloue 16 Go et la machine a 8 Go, l'ordinateur commence à échanger par ordinateur (et cela n'a pas d'importance si la fonction ultérieure B va le compromettre).
Pourquoi avez-vous besoin de 16 g de mémoire pour être allouée à la fois? Je pense que vous devriez reconsidérer vos besoins et votre conception.
@ Vikram.exe - Vous avez raison, mais pour répondre à cette question, il a besoin des résultats du profileur :-) (N'oubliez pas - il peut conserver le code écrit par quelqu'un d'autre, et même si ce n'est pas un comportement réel de la vie réelle de Les systèmes peuvent souvent être imprévisibles :-)