Domanda

Qualcuno può dare una chiara spiegazione del significato dei valori SIZE e RSS che otteniamo da Prstat in Solaris?

Ho scritto un'applicazione di prova C ++ che alloca la memoria con new [] , la riempie e la libera con delete [] .

Come ho capito, il valore SIZE dovrebbe essere correlato a quanta memoria virtuale è stata "riservata". dal processo, cioè memoria "malloced" o " newed " ;.

Quella memoria non si riassume nel valore RSS a meno che non lo usi davvero (riempiendo di alcuni valori). Ma poi anche se libero la memoria, l'RSS non cade.

Non capisco quale semantico posso assegnare correttamente a quei 2 valori.

È stato utile?

Soluzione

RSS è (AFAIK in modo affidabile) che rappresenta la quantità di memoria fisica utilizzata da un processo. Utilizzando l'allocatore di memoria predefinito di Solaris, la liberazione della memoria non fa nulla sull'RSS in quanto modifica solo alcuni puntatori e valori per indicare che la memoria è libera per essere riutilizzata. Se non si utilizza di nuovo quella memoria allocandola di nuovo, alla fine verrà impaginata e l'RSS scenderà.

Se si desidera che la memoria liberata venga restituita immediatamente dopo una memoria libera, è possibile utilizzare l'allocatore mmap di Solaris in questo modo:

export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap

Altri suggerimenti

Dimensione è la dimensione totale della memoria virtuale del processo, inclusi tutti i file e i dispositivi mappati, e RSS dovrebbe essere la dimensione impostata per il residente, ma è completamente inaffidabile, tu dovrebbe cercare di ottenere tali informazioni da pmap .

Come regola generale, una volta allocata la memoria a un processo, questa non verrà mai restituita al sistema operativo. Sui sistemi Unix la chiamata sbrk () viene utilizzata per estendere lo spazio degli indirizzi dei processi e non esiste una chiamata analoga per andare nella direzione opposta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top