2014-05-19 6 views
6

Mam aplikację, której pamięć rośnie wraz z przypadkami testowymi, które uruchamiam. To oczywiście doprowadziło mnie do przekonania, że ​​moja aplikacja przepuszcza pamięć. Więc uruchomiłem valgrind na mojej aplikacji i zaskakująco nie znalazłem żadnych przecieków.Czy prywatna brudna pamięć może wskazywać na wyciek pamięci?

Nie jestem pewien, dlaczego pamięć mój proces jest nieszczelny, więc spojrzał na pliku smaps mojego procesu i poniżej, jeśli co znalazłem interesujący

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 

sensu o tych liczbach Zrobiłem kilka badań o pamięci Private_Dirty, większość artykułów wskazuje, że to pamięć, która nie została jeszcze uwolniona, ponieważ są kosztowne.

To wydaje się wskazywać, że są to tylko pamięć, która została zwolniona przez aplikację, ale nadal jest wstrzymywana przez system operacyjny.

Czy ktoś może mi pomóc lepiej zrozumieć private_dirty? Czy to może oznaczać wyciek pamięci?

Dzięki

+0

Czy pamięć coraz mniejsze po etapie czyszczenia a przed rutynowych wyjść? Wygląda na to, że trzymasz się czegoś w odniesieniu do przypadków testowych, które powodują zatrzymanie pamięci. Czy korzystasz z dzielonych wskaźników lub zarządzania pamięcią bezpośrednio? – Jiminion

+1

Istnieje opis [tutaj] (http://stackoverflow.com/a/17596928/2096401) tego, czym jest prywatna-brudna: w zasadzie pamięć twojego procesu "wykorzystała" (zapisano), tak że musiałaby zostać zapisana, jeśli zamieniony, aby zrobić miejsce dla innego procesu. Sam w sobie nie oznacza, że ​​masz przeciekać pamięć. – TripeHound

+0

Być może przydzielasz dużo małej wielkości pamięci, a następnie przydzielasz jej czas. Nie mogę przewidzieć wiele, ale czy ma to coś wspólnego z fragmentacją pamięci? –

Odpowiedz

0

Wydaje się, że pamięć czeka na zapisane na dysku, na którym system jest poświęcić trochę czasu na robienie tego. Twój program musi generować dużo wyników, które są zapisywane na pliki dysków.

What is dirty private memory?