Speichernutzung des Prozesses auslesen
-
Hallo allerseits!
Weiß jemand wie ich die Größe des virtuellen Speichers, der für meinen Prozess beansprucht wird, auslesen kann?
Ich habe bisher nur etwas zum gesammten System gefunden (GlobalMemoryStatus).Vielen Dank für eure Hilfe!
-
Siehe mein Kommentar auf http://www.c-plusplus.net/forum/viewtopic-var-t-is-195688-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html
Martin
-
OK, danke!
Stimmt meine Annahme dass ich den kompletten beanspruchten (virtuellen) Speicher nur aus der Summe aus QuotaPagedPoolUsage und QuotaNonPagedPoolUsage erhalte?
Denn WorkingSetSize ist doch nur die Speichermenge die sich im RAM befindet, oder?
-
Den Werten zufolge kann es QuotaPagedPoolUsage + QuotaNonPagedPoolUsage nicht sein.
Es kommt einzigst "PagefileUsage" / "PeakPagefileUsage" in Frage, allerdings währe da die Bezeichnung doch sehr verwirrend?!Jedenfalls ist dies wie folgt definiert: "The current space allocated for the pagefile, in bytes. Those pages may or may not be in memory."
Toll! Na ist es nun die page file usage oder nicht?
-
Ähm, ich hatte angenommen, den virtuellen Speicher den Du meinst, wäre der der Speicherbedarf in der Auslagerungsdatei (i.d.R. in "pagefile.sys"). Für diesen Fall sind die Members PagefileUsage und PeakPagefileUsage von PROCESS_MEMORY_COUNTERS Deine Freunde.
Wenn Du aber den wirklichen virtuellen Speicher im virtuellen Adressraum eines jeden Win32-Prozesses wissen willst: Der ist immer 2 GByte groß (naja, fast immer, siehe Ausnahme).
In diesem Fall liefern Dir die Mebers ullTotalVirtual und ullAvailVirtual von MEMORYSTATUSEX die nötigen Infos.
Ausnahme: Wenn man z.B. Win XP oder Win Server 2003 (auf einem System mit 4GByte RAM) mit dem Schalter "/3GB" bootet, dann steht dem Prozess auch 3 GByte virtuellen Speicher zu. Unter Win Vista habe ich sowas noch nicht analysiert.Hintergrundinformation virtueller Speicher: Windows teilt den gesamten virtuellen Speicher von 4GByte auf in 2GByte für den Kernel (also Betriebssystem) und 2GByte für den User (also Applikationen) auf.
Nachtrag, ganz wichtig:
a) Alles was ich gerade eben geschrieben habe bezieht sich nur auf 32-Bit Programme!!! Bei 64-Bit sieht die virtuelle (Speicher-)Welt schon wieder anders aus!
b) "2GByte" sind hier "knapp 2GByte" gemeint, also ein wenig darunter, da immer irgendwelche Speicherbereiche anderweitig reserviert werden.Martin
-
Allein den Werten zu folge kann es nicht sein dass PagefileUsage/PeakPagefileUsage nur den auf die Festplatte befindlichen Seiten entspricht.
Die Dokumenation von PROCESS_MEMORY_COUNTERS sagt zu PagefileUsage: "The current space allocated for the pagefile, in bytes. Those pages may or may not be in memory."
Das sind also Speicherseiten die im RAM oder auf der Festplatte eingeblendet sind.
Nur ob dies nun tatsächlich dem gasammten, vom Prozess genutzten virtuellen Speicher entspricht.
-
Sorry, ich denke wir schreiben uns aneinander vorbei...
Was genau willst Du denn nun wissen?
Den virtuellen Speicher oder den Speicherbedarf in der Auslagerungsdatei?
Beides sind zwei verschiedene Paar Schuhe!Martin
P.S.: Verlasse Dich NIEMALS darauf, daß eine Datei für die eine bestimmte Größe gemeldet wird, sich auch tatsächlich physikalisch auf der Festplatte befindet (ganz oder teilweise)! Da gibts auch für die Auslagerungsdatei pagefile.sys keine Ausnahme.
Man denke nur an den ganzen Windows-internen Verwaltungskram (virtuelle Abbilder im RAM) sowie den Lese- und Schreibcaches usw.
-
Weder noch. Ich will die Größe des kompletten, vom Prozess genutzten Speichers wissen.
-
PagefileUsage
PS: Was verstehst Du unter "komplett"?
-
Aha. Hast du dazu eine genauere Dokumentation gefunden?
Mit "komplett" meine ich den gesamten genutzten Speicher im Adressbereich des Prozesses.
-
Da wirst Du aber noch viel mehr Speicher rausbekommen, der z.B. zwischen *allen* Prozesses gemeinsam ist (z.B. DLLs). Diese "belegen" sozusagen keinen Speichern, gehören aber trotzdem zu Deinem Prozess...
Um z.B. *allen* Speicher rauszufinden, siehe hier:
http://blog.kalmbachnet.de/?postid=9