8

有人可以对我们从 Solaris 中的 prstat 获得的 SIZE 和 RSS 值的含义给出一些明确的解释吗?

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

据我了解,SIZE 值应该与进程“保留”多少虚拟内存有关,即内存“分配”或“新”。

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

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

4

3 回答 3

6

RSS 是(AFAIK 可靠)表示一个进程正在使用多少物理内存。使用 Solaris 默认内存分配器,释放内存不会对 RSS 做任何事情,因为它只是更改一些指针和值以告知内存可以自由重用。如果您不通过再次分配来再次使用该内存,它最终将被分页并且 RSS 将下降。

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

export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap
于 2010-01-07T21:03:02.413 回答
2

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

于 2008-12-06T18:25:59.427 回答
0

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

于 2009-12-08T16:11:23.180 回答