2014-05-19 6 views
6

Ich habe eine Anwendung, deren Speicher mit den Testfällen zunimmt, die ich ausführe. Dies hat mich offensichtlich dazu gebracht, zu glauben, dass meine Anwendung Speicher verliert. So lief ich Valgrind auf meiner Anwendung und überraschenderweise fand es keine Lecks.Kann privater schmutziger Speicher ein Hinweis auf ausgelaufenen Speicher sein?

Ich bin nicht sicher, warum Speicher mein Prozess undicht ist, so habe ich mir die smaps Datei von meinem Prozess und unten, wenn, was ich

interessant gefunden
08426000-42f56000 rwxp 00000000 00:00 0         [heap] 
Size:    961728 kB 
Rss:    960252 kB 
Pss:    960252 kB 
Shared_Clean:   0 kB 
Shared_Dirty:   0 kB 
Private_Clean:   0 kB 
Private_Dirty: 960252 kB 
Referenced:  960252 kB 
Anonymous:  960252 kB 
AnonHugePages:   0 kB 
Swap:     0 kB 
KernelPageSize:  4 kB 

Um Sinn über diese Zahlen zu machen ich einige der Forschung haben über Private_Dirty Speicher, die meisten Artikel zeigen, dass dies der Speicher, der noch nicht freigegeben wurde, weil sie teuer sind.

Dies scheint darauf hinzuweisen, dass dies nur Speicher ist, der von der Anwendung freigegeben wurde, aber immer noch vom Betriebssystem zurückgehalten wird.

Kann jemand mir helfen, private_dirty besser zu verstehen? Kann dies ein Hinweis auf das Speicherleck sein, das ich habe?

Dank

+0

Bekommt der Speicher kleiner nach einem Bereinigungsschritt und vor der Routine verlassen? Es hört sich so an, als würden Sie etwas in Bezug auf die Testfälle festhalten, was dazu führt, dass die Erinnerung gehalten wird. Verwenden Sie geteilte Zeiger oder beschäftigen Sie sich direkt mit der Speicherverwaltung? – Jiminion

+1

Es gibt eine Beschreibung [here] (http://stackoverflow.com/a/17596928/2096401) von was private-dirty ist: im Grunde Speicher, den Ihr Prozess "verwendet" (geschrieben) hat, so dass es gespeichert werden müsste, wenn ausgelagert, um Platz für einen anderen Prozess zu schaffen. Zeigt nicht an, dass Sie Speicher verlieren. – TripeHound

+0

Möglicherweise reservieren Sie viel Speicherplatz mit geringer Größe und nehmen dann die Zuordnung auf. Ich kann nicht viel vorhersagen, aber hat es etwas mit Speicherfragmentierung zu tun? –

Antwort

0

Es scheint, für die auf die Festplatte geschrieben zu werden, wird das System nimmt einige Zeit damit Speicher zu warten. Ihr Programm muss viele Ergebnisse produzieren, die auf die Festplatte geschrieben werden.

What is dirty private memory?

Verwandte Themen