Wie man die Speichernutzung zur Laufzeit mithilfe von C++?
Ich brauche, um die CPU-Auslastung und VIRT RES zur Laufzeit meines Programms und zeigt diese an.
Was ich bisher ausprobiert:
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;
aber ich bekomme immer 0.
- Das ist system abhängig ist-es scheint Ihr system nicht unterstützt reporting maxrss über getrusage - - können Sie uns sagen, welche distribution du verwendest?
- Komm, cout, als ein tag?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Linux habe ich nie eine ioctl() Lösung. Für unsere Anwendungen, die wir codiert eine Allgemeine utility-routine, basierend auf das Lesen von Dateien in /proc/pid. Es gibt eine Anzahl von diese Dateien, die geben unterschiedliche Ergebnisse. Hier ist der, den wir beigelegt (die Frage wurde getaggt C++, und wir behandelten I/O mit C++ - Konstrukten, aber es sollte leicht anpassbar sein, um C-i/o-Routinen, wenn Sie benötigen):
why 1024.0?
- Es sagt dem compiler zu konvertieren verdoppeln und dann machen die Kluft zu Holen Sie sich die Doppel-Folge. Die andere Wahl:vm_usage = vsize / 1024;
tun würde, die Kluft ersten, (verlieren Präzision, wie @DonWakefield angedeutet) konvertieren und dann zu verdoppeln.David Robert Nadeau hat eine gute Selbstversorger - multi-Plattform C-Funktion, um den Prozess resident set size (physical memory verwenden) in seine website:
Nutzung
Weitere Diskussion, überprüfen Sie die Website, es bietet auch eine Funktion der Größe des physikalischen Speichers des Systems.
#pragma comment(lib, "psapi.lib")
zu den#if defined(_WIN32)
Umfang.Alt:
Neu:
Es scheint, dass die oben genannten, die eigentlich gar nicht funktionieren, da der kernel nicht füllen die meisten der Werte. Was funktioniert ist um die Informationen von proc. Statt parsing-es-sich-selbst-obwohl, es ist einfacher zu verwenden libproc (Teil des procps) wie folgt:
Kompilieren mit "
gcc -o getrusage getrusage.c -lproc
"#include <proc/readproc.h>
Lösung hat Super funktioniert bei mir auch unter Ubuntu. Ich hatte das Paket zu installierenlibproc-dev
.usage.vm_data
ist eine ausreichend enge Annäherung an das, was ich brauchte. Ihre Wahl der Speicher-Statistik sind hier dokumentiert:/usr/include/proc/readproc.h
die, Die ich habe versucht, alle scheinen in bytes, nicht Seiten. Ich glaube nicht, dass mein Prozess war mit 46 Millionen Seiten. Kommentare, dass diese Lösung funktioniert nicht unter Linux scheinen fehlgeleitet.Unter linux, wenn Sie sich leisten können, die Laufzeit, die Kosten (für debugging), kann man valgrind mit dem Massiv-tool:
http://valgrind.org/docs/manual/ms-manual.html
Es ist schwere, aber sehr nützlich.
Den vorhandenen Antworten sind besser für, wie man den richtigen Wert, aber ich kann zumindest erklären, warum getrusage nicht für Sie arbeiten.
Mann 2 getrusage:
Einen eleganteren Weg für Don Wakefield Methode:
zusätzlich zu Ihrem Weg
man könnte Sie als system ps-Befehl bekommen und memory die Nutzung von it-Ausgang.
oder Lesen Sie Infos aus /proc/pid ( siehe PIOCPSINFO struct )
Bin ich mit anderen Weg, das zu tun, und es klingt realistisch. Was ich mache ist, bekam ich die PID des Prozesses von getpid () - Funktion und dann habe ich mit " /proc/pid/stat-Datei. Ich glaube, dass der 23-Spalte des stat-Datei ist die vmsize (Blick auf den Don post). Sie können Lesen Sie die vmsize aus der Datei, wo immer Sie brauchen, in den code. Im Falle dass Sie sich Fragen, wie viel ein Ausschnitt aus einem code kann die Verwendung von Speicher, Sie können diese Datei Lesen, einmal vor, das snippet und einmal nach-und Sie können subtrahieren Sie von einander.
Basierend auf Don W ' s Lösung mit weniger Variablen.
Ich war auf der Suche nach einem Linux-app zur Messung maximaler Speicher verwendet. valgrind ist ein hervorragendes Werkzeug, aber war mir mehr Informationen als ich wollte. tstime schien das beste tool, das ich finden konnte. Es misst die "highwater" memory usage (RSS-Feeds und virtuellen). Sehen diese Antwort.