Sto sviluppando un'applicazione su un sistema Linux a 64 bit. Come ho potuto vedere, la mia app sta mangiando troppa memoria sporca. Parlando della memoria heap, cosa significa "sporco"? Cosa lo fa sorgere e cosa si può fare per evitare che si presenti?Che cos'è la memoria privata sporca?
EDIT
Sarà meglio spiegare cosa operazioni miei esegue applicazioni.
La mia applicazione viene eseguita in due thread: il primo thread invia i lavori a una coda che vengono quindi eseguiti in un altro thread. Quindi, il primo thread alloca le pagine per essere accodate e il secondo thread le deseleziona, esegue i loro lavori e li libera. Tutte queste operazioni si svolgono in un modo sicuro per i thread.
Così ho fatto un test su questa cosa, facendola fare la coda di lavoro a 100000000 ed eseguirli tutti. Fino a un certo istante, l'utilizzo della memoria aumenta. Quindi, quando il processo di accodamento termina e rimane solo quello di dequeuing, l'utilizzo della memoria inspiegabilmente non diminuisce. Infine, quando tutti i lavori vengono rimossi dalla coda e eseguiti, tutta la memoria viene liberata. Quindi, sembra che la perdita di memoria stia accadendo nel processo di rimozione, poiché quando finisce la memoria viene liberata, ma non ho trovato nulla di sbagliato nel suo codice.
So che sarebbe meglio se inserissi il mio codice qui, ma è troppo grande. Ma, da quello che ho aggiunto, qualcuno ha una supposizione su cosa potrebbe causare questo?
come vedi di avere "memoria sporca dell'heap", cosa hai fatto per vederlo? – maazza
@maazza Ho dato un'occhiata alla perdita di memoria '/ proc/PID/smaps' – LuisABOL
? controlla con 'valgrind'. –