2010-10-06 5 views
1

Existe-t-il une fonction libc (ou équivalent) pour connaître la taille actuelle du tas?Existe-t-il une fonction libc (ou équivalent) pour connaître la taille actuelle du tas?

J'ai un problème de mémoire dans mon application, et il semble être capable de surveiller le tas quand je veux m'aider à trouver le problème. Alors, existe-t-il un moyen de connaître la taille actuelle du tas?

+1

Cela dépend du système d'exploitation. Quel OS ciblez-vous? – plodoc

+0

qu'en est-il de brk ou sbrk? –

Répondre

4

n °

Comme la fonctionnalité que vous voulez pour le débogage, il serait beaucoup plus logique pour vous d'utiliser votre débogueur ou la comptabilité des ressources de votre système d'exploitation pour surveiller l'utilisation de la mémoire du processus, au lieu d'essayer de coder cela dans votre programme.

Si vous vraiment voulez que votre programme pour garder une trace de sa propre utilisation de la mémoire, la seule façon portable de le faire est d'éviter d'utiliser directement malloc et free et au lieu de les appeler par les enveloppes que incrémenter/décrémenter un compteur. Cela ne tient pas compte de la fragmentation de la mémoire, mais si vous vous intéressez à l'utilisation de la mémoire logique et non à l'impact sur les ressources physiques, un compteur implémenté de cette manière peut être plus informatif que la comptabilité des ressources du système d'exploitation.

Si vous vous souciez uniquement d'une plate-forme ou d'une famille de plates-formes cible particulière, vous pouvez également utiliser des fonctions au-delà de la norme C qui font ce que vous voulez. Sur POSIX, recherchez getrusage.

0

Encore ne serait pas utile. Voulez-vous savoir:
L'espace d'adressage total.
L'espace disponible pour les programmes utilisateur
L'espace non alloué, à ce processus, y compris le remplacement ou non
Le plus gros morceau gratuitement

etc.

0

Vous pouvez utiliser des outils comme Purify pour déboguer les problèmes de mémoire. This article from IBM contient beaucoup de détails sur les sources de ces problèmes et des pointeurs vers des solutions.

Questions connexes