2008-12-06 2 views
7

Может ли кто-нибудь дать ясное объяснение значения значений SIZE и RSS, которые мы получаем от prstat в Solaris?Значение значений SIZE и RSS в выход prstat

Я написал тестовое приложение на C++, которое выделяет память new[], заполняет его и освобождает его delete[].

Как я понял, значение SIZE должно быть связано с тем, насколько виртуальная память была «зарезервирована» процессом, то есть память «malloced» или «newed».

Эта память не суммируется в значении RSS, если я не использую ее (заполнение некоторыми значениями). Но тогда, даже если я освобожу память, RSS не упадет.

Я не понимаю, какую семантику я могу правильно присвоить этим двум значениям.

ответ

4

RSS (AFAIK надежно), представляющий, сколько физической памяти используется процессом. Используя распределитель памяти по умолчанию Solaris, освобождение памяти ничего не делает о RSS, поскольку оно просто меняет некоторые указатели и значения, чтобы сообщить, что память может быть использована повторно. Если вы снова не используете эту память, выделив ее снова, она в конечном итоге будет разбита на страницы и RSS упадет.

Если вы хотите, освободили память возвращаются сразу же после того, как свободный, вы можете использовать Solaris MMAP аллокатор так:

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

Не забывайте, однако, что в зависимости от размера распределения он возвращается к нормальной sbrk поведение, то есть на моем ящике Solaris, если я буду umem, как описано, и выделите куски размером менее 16k, он не освободит память на бесплатной, но она будет на кусках> 16k. – ScaryAardvark 2012-05-25 08:25:44

1

Размер это общий размер виртуальной памяти процесса, включая все отображенные файлы и устройство, а также RSS должны быть резидентного размером, но совершенно ненадежен, вы должны попытаться получить эту информацию от ртара.

0

Как правило, если память распределена процессу, она никогда не будет возвращена операционной системе. В системах Unix вызов sbrk() используется для расширения адресного пространства процессов, и нет аналогичного вызова для перехода в другом направлении.