2014-05-19 8 views
6

Ho un'applicazione la cui memoria aumenta con i casi di test eseguiti. Questo ovviamente mi ha portato a credere che la mia domanda stia perdendo memoria. Così ho eseguito valgrind sulla mia applicazione e sorprendentemente non ha trovato perdite.La memoria sporca privata può essere un'indicazione di perdita di memoria?

io non sono sicuro perché la memoria del mio processo sta perdendo, così ho guardato il file smaps del mio processo e qui sotto se quello che ho trovato interessante

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 

Per dare un senso di questi numeri ho fatto qualche ricerca sulla memoria Private_Dirty, la maggior parte degli articoli indica che questa memoria non è stata ancora liberata perché costosa.

Questo sembra indicare che si tratta solo di memoria liberata dall'applicazione ma ancora trattenuta dal sistema operativo.

Qualcuno può aiutarmi a comprendere meglio private_dirty? Può essere un'indicazione della perdita di memoria che ho?

Grazie

+0

Ha la memoria si fanno più piccoli, dopo una fase di pulitura e prima che le uscite di routine? Sembra che tu stia trattenendo qualcosa rispetto ai casi di test che causano il trattenimento della memoria. Stai usando dei puntatori condivisi o gestisci direttamente la gestione della memoria? – Jiminion

+1

C'è una descrizione [qui] (http://stackoverflow.com/a/17596928/2096401) di ciò che è privato-sporco: in pratica la memoria che il tuo processo ha "usato" (scritto in) in modo che avrebbe bisogno di essere salvato se scambiato per fare spazio per un altro processo. Di per sé non indica che stai perdendo memoria. – TripeHound

+0

Forse stai allocando molta memoria di piccole dimensioni e poi deallocate. Non posso prevedere molto ma ha qualcosa a che fare con la frammentazione della memoria? –

risposta

0

sembra essere la memoria in attesa di essere scritti su disco, per cui il sistema sta prendendo un po 'di tempo a farlo. Il tuo programma deve produrre molti risultati che vengono scritti su file su disco.

What is dirty private memory?