Comment faire pour obtenir l'utilisation de la mémoire lors de l'exécution à l'aide de C++?
J'ai besoin d'obtenir le mem utilisation VIRT et RES au moment de l'exécution de mon programme et de les afficher.
Ce que j'ai essayé jusqu'à présent:
getrusage (http://linux.die.net/man/2/getrusage)
int who = RUSAGE_SELF;
struct rusage usage;
int ret;
ret=getrusage(who,&usage);
cout<<usage.ru_maxrss;
mais je reçois toujours 0.
- C'est dépendante du système -- il semble que votre système ne prend pas en charge le reporting maxrss via getrusage -- pouvez-vous nous dire de la distribution que vous utilisez?
- Allez, cout comme un tag?
Vous devez vous connecter pour publier un commentaire.
Sur Linux, je n'ai jamais trouvé un ioctl() solution. Pour nos applications, nous avons codé l'utilité générale, la routine, basée sur la lecture des fichiers en /proc/pid. Il y a un certain nombre de ces fichiers qui donnent des résultats différents. Voici celle que nous avons choisie (la question a été marqué C++, et nous avons géré I/O à l'aide de constructions C++, mais il doit être facilement adaptable à C i/o routines si vous avez besoin):
why 1024.0?
- Il fait dire au compilateur de les convertir à double PREMIER et ensuite faire le diviser pour obtenir le double résultat. L'autre choix:vm_usage = vsize / 1024;
ferait le diviser en premier, (perte de précision @DonWakefield a laissé entendre) et ensuite de les convertir en double.David Robert Nadeau a mis une bonne autonomes plate-forme multi-fonction C pour obtenir le processus de résident taille de l'ensemble (physique, l'utilisation de la mémoire) dans son site web:
Utilisation
Pour plus de détails, consultez le site web, il fournit également une fonction permettant d'obtenir la taille de la mémoire physique d'un système.
#pragma comment(lib, "psapi.lib")
à la#if defined(_WIN32)
portée.Vieux:
Nouveau:
Il semble que le ci-dessus ne fonctionne, que le noyau n'a pas de remplir la plupart des valeurs. Ce n'travail est d'obtenir l'information de proc. Au lieu d'analyser soi-même, cependant, il est plus facile à utiliser libproc (partie de procps) comme suit:
Compiler avec "
gcc -o getrusage getrusage.c -lproc
"#include <proc/readproc.h>
solution a très bien fonctionné pour moi sous Ubuntu. J'ai dû installer le paquetlibproc-dev
.usage.vm_data
est assez proche approximation de ce dont j'avais besoin. Votre choix de la mémoire statistique est documenté ici:/usr/include/proc/readproc.h
ceux que j'ai essayé tous semblent être en octets, pas de pages. Je ne pense pas que mon processus a été à l'aide de 46 millions de pages. Les commentaires que cette solution ne fonctionne pas sous Linux semble erronée.Sur linux, si vous pouvez vous permettre le temps d'exécution de coût (pour le débogage), vous pouvez utiliser valgrind avec le massif de l'outil:
http://valgrind.org/docs/manual/ms-manual.html
Il est lourd le poids, mais très utile.
Les questions /réponses sont mieux pour savoir comment obtenir la valeur correcte, mais je peux au moins expliquer pourquoi getrusage ne fonctionne pas pour vous.
man 2 getrusage:
Une façon plus élégante pour Ne Wakefield méthode:
dans supplémentaires à votre façon
vous appelez le système de commande ps et obtenir l'utilisation de la mémoire de sortie.
ou de lire des informations à partir de /proc/pid ( voir PIOCPSINFO struct )
Je suis en utilisant d'autres façon de le faire et il semble réaliste. Ce que je fais c'est que je suis le PID du processus par getpid() et la fonction puis-je utiliser /proc/pid/fichier stat. Je crois que le 23 colonne du fichier stat est le vmsize (regardez le Don post). Vous pouvez lire les vmsize à partir du fichier où vous en avez besoin dans le code. Dans le cas où vous vous demandez combien un extrait d'un code peut utiliser de la mémoire, vous pouvez lire ce fichier une fois avant que l'extrait de code et une fois après, et vous pouvez soustraire l'un de l'autre.
Basé sur le Don W est solution, avec moins de variables.
Je cherchais une application Linux pour mesurer la mémoire maximale utilisée. valgrind est un excellent outil, mais il a été de me donner plus de renseignements que je voulais. tstime semblait être le meilleur outil que j'ai pu trouver. Il mesure "highwater" l'utilisation de la mémoire (RSS et virtuel). Voir cette réponse.