prstat输出中SIZE和RSS值的含义

时间:2008-12-06 15:02:04

标签: solaris virtual-memory

有人可以清楚地解释我们从Solaris中的prstat获得的SIZE和RSS值的含义吗?

我写了一个测试C ++应用程序,用new[]分配内存,填充它并用delete[]释放它。

据我所知,SIZE值应该与进程“保留”了多少虚拟内存有关,即内存“malloced”或“newed”。

除非我真的使用它(填充一些值),否则内存不会在RSS值中总结。但即使我释放内存,RSS也不会掉线。

我不明白我能正确分配给这两个值的语义。

3 个答案:

答案 0 :(得分:5)

RSS(AFAIK可靠)表示进程使用的物理内存量。使用Solaris默认内存分配器,释放内存对RSS没有任何作用,因为它只是更改了一些指针和值来告诉内存可以自由重用。 如果你不再通过重新分配来再次使用那个内存,它最终将被分页并且RSS将会丢失。

如果要在释放后立即返回释放的内存,可以使用Solaris mmap分配器,如下所示:

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

答案 1 :(得分:1)

大小是进程的总虚拟内存大小,包括所有映射的文件和设备, RSS 应该是驻留集大小,但是完全不可靠,你应该尝试从 pmap 获取该信息。

答案 2 :(得分:0)

作为一般规则,一旦将内存分配给进程,它将永远不会返回给操作系统。在Unix系统上,sbrk()调用用于扩展进程地址空间,并且没有类似的调用去另一个方向。