VS2010 Premium: Aktuellen Speicherverbrauch
- 
					
					
					
					
 Hallo, ich habe eine multithread-C++ Anwendung, diw während des Betriebs immer mehr Speicher verbraucht. Wenn ich die normalen Marcos / Tools verwendete, bekomme ich die Information, das am Programmende der gesamte Speicher wieder freigegeben wurde. Wie kann man sich die Speicherbelegung während des Programmlaufs anschauen. Ich würde gerne einen Breakpoint setzen und mir dann die Speicherbelegung anschauen. Ich verwende das Visual Studio 2010 Premium, gibt es dort diese Möglichkeit oder gibt es irgendwelche Tools? Gruss 
 Lars
 
- 
					
					
					
					
 Am "einfachsten" geht dies mit UMDH aus den "Debugging Tools for Windows"... 
 http://msdn.microsoft.com/en-us/library/windows/hardware/ff560206
 
- 
					
					
					
					
 Danke für die Info... Dann werde ich mir einmal das Windows SDK für Windows XP installieren und mal sehen wie weit ich mit UMDH komme. Gruss 
 Lars
 
- 
					
					
					
					
 Die CRT hat dutzende Helferlein hierfür: 
 http://msdn.microsoft.com/en-US/library/wc28wkas(v=vs.80).aspx
 
- 
					
					
					
					
 Guten Morgen Martin, diese Helferlein kenne ich. Wenn ich diese Helferlein verwende, kann ich feststellen, daß zum Ende des Programms aller Speicher wieder freigegeben wird und sich somit kein Speicherleck, das durch ein fehlendes delete/free verursacht wird, vorhanden ist. Nur der Speicherverbrauch des Programms steigt unregelmäßig in 8k Schritten an. 
 Deshalb will ich analysieren, welche Objekte zu bestimmten Zeitpunkten Speicher allokiert haben.Hoffe, ich habe mich verständlich ausgedrückt. Gruss 
 Lars
 
- 
					
					
					
					
 möglicherweise beobachtest du auch nur die Speicherfragmentierung. das tritt besonders dann auf, wenn man viele kleine Objekte häufig ändert http://www.google.de/#output=search&sclient=psy-ab&q=c%2B%2B+speicherfragmentierung+Stroustrup 
 
- 
					
					
					
					
 ja, das mit der Speicherfragmentierung könnte sein. Mithilfe von umdh erstelle 
 ich mir inzwischen Logs, die mir anzeigen, wie die aktuelle Heapbelegung ist.
 Während die Speicherauslastung im Windows Task-Manager um 4k steigt, liefert mir umdh folgendes Ergebnis.Total decrease == 0 requested + 0 overhead = 0 Sieht für mich nach Speicherfragmentierung. Oder? Gruss 
 Larsdd++ schrieb: möglicherweise beobachtest du auch nur die Speicherfragmentierung. das tritt besonders dann auf, wenn man viele kleine Objekte häufig ändert http://www.google.de/#output=search&sclient=psy-ab&q=c%2B%2B+speicherfragmentierung+Stroustrup 
 
- 
					
					
					
					
 mit UMDH kenne ich mich jetzt im Detail nicht so aus, aber wenn solche Debugging Tools kein Memory Leak melden, dann liegt es wohl an der Fragmentierung unter WinXP muß man den LFH selber aktivieren, vielleicht verbessert sich da ja etwas 
 
- 
					
					
					
					
 Schonmal daran gedacht das es gar nicht an new-Aufrufen liegt sondern an irgendwelchen Kernel-Objekten die du nicht richtig freigibst? 
 
- 
					
					
					
					
 An was für Kernelobjekte denkst du? Die Anwendung hat eine minimale MFC-Oberfläche und verwendet sonst nichts Windows-spezifisches. Es kommt eine spezielle Datenbank zum Einsatz. Es werden Critcalsections verwendet, ansonsten nur normaler C++ Code mit boost. Gruss 
 Larshmm. schrieb: Schonmal daran gedacht das es gar nicht an new-Aufrufen liegt sondern an irgendwelchen Kernel-Objekten die du nicht richtig freigibst? 
 
- 
					
					
					
					
 Habe gerade versucht die LFH einzuschalten. Bekomme aber den Fehlercode 31 (= A device attached to the system is not functioning) von GetLastError zurück. Auch in der Release-Version. Gruss 
 Larsdd++ schrieb: mit UMDH kenne ich mich jetzt im Detail nicht so aus, aber wenn solche Debugging Tools kein Memory Leak melden, dann liegt es wohl an der Fragmentierung unter WinXP muß man den LFH selber aktivieren, vielleicht verbessert sich da ja etwas 
 
