有人能给的大小和RSS值的含义一些明确的解释,我们从了prstat得到的Solaris?

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

正如我理解的,SIZE值应该与多少虚拟内存已经由过程“保留”,即存储器“malloced”或“newed”。

这存储器不会在RSS值总结除非我真正使用它(与一些值填充)。但是,那么即使我释放内存,RSS不下降。

我不明白语义我可以正确地分配给这些2个值。

有帮助吗?

解决方案

RSS是(AFAIK可靠地)表示的处理多少物理内存使用。使用Solaris默认的内存分配器,释放内存不做些什么RSS,因为它只是改变了一些指针和数值来告诉内存免费得到重用。 如果不再次分配它再次使用内存,它最终会被分页出来的RSS将下降。

如果你想释放的内存进行后自由立即返回,您可以使用Solaris的mmap分配是这样的:

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

其他提示

<强>尺寸与方法的总虚拟内存的大小,包括所有映射文件和设备,和 RSS 应该驻留集的大小,但是完全不可靠你,应该尝试从这些信息的 PMAP

作为一次存储器的一般规则被分配给它永远不会被归还给操作系统的过程。在Unix系统的SBRK()调用用于扩展进程的地址空间,并且没有类似呼叫在另一个方向去。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top