Pergunta

Alguém pode dar alguma explicação clara do significado do tamanho e RSS valores que recebemos de prstat no Solaris?

Eu escrevi um aplicativo de teste de C ++ que aloca memória com new[], preenche-lo e libera-lo com delete[].

Como eu entendi, o valor do tamanho deve estar relacionado com a quantidade de memória virtual foi "reservado" pelo processo, que é a memória "malloced" ou "newed".

Essa memória não resumir o valor RSS menos que eu realmente usá-lo (enchimento com alguns valores). Mas, então, mesmo se eu liberar a memória, o RSS não cair.

Eu não entendo o que semântica posso atribuir corretamente para esses 2 valores.

Foi útil?

Solução

RSS é (AFAIK confiável) que representa a quantidade de memória física de um processo está usando. Usando alocador Solaris memória padrão, liberando memória não fazer nada sobre RSS, uma vez que apenas muda alguns ponteiros e valores para dizer que a memória é livre para ser reutilizada. Se você não usar novamente essa memória alocando-lo novamente, ele acabará por ser paginado fora eo RSS vai cair.

Se você quiser memória liberada para ser devolvido imediatamente após um livre, você pode usar o mmap alocador Solaris como esta:

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

Outras dicas

Tamanho é o tamanho da memória virtual total do processo, incluindo todos os arquivos e dispositivos mapeados, e RSS deve ser o tamanho do conjunto residente, mas é completamente confiável, você deve tentar obter essa informação a partir de pmap .

Como regra geral, uma vez memória é alocada a um processo que nunca será dado de volta para o sistema operacional. Em sistemas Unix da chamada sbrk () é usado para estender o espaço de endereço de processos, e não há atendimento análogo ao ir na outra direção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top