我有使用共享内存的多进程应用程序.我试图在我的应用程序中检测内存泄漏.我在/ proc / $pid / smap中找到了这个
2b51cd2b2000-2b53b8aa4000 rw-s 00000000 00:09 17151225 /dev/zero (deleted)
Size: 8052680 kB
RSS: 31608 kB
Shared_Clean: 1524 kB
Shared_Dirty: 25736 kB
Private_Clean: 0 kB
Private_Dirty: 4348 kB
Swap: 0 kB
Pss: 6945 kB
这是我分配的共享内存.(大小告诉我这是我用mmap分配的内存)
我试图了解内存本身共享的上下文中共享/私有之间的区别.看’s’标志.
如果任何人可以解释Shared_Clean与Private_Clean之间的区别
Shared_Dirty vs Private_Dirty在共享内存的上下文中.
最佳答案
Clean和Dirty之间的区别是指自从写入内存以来页面是否已写出到后备存储.对于/ dev / zero的映射,页面显然从不写出,因此只读取了干净页面,而写入了脏页面.
对于共享映射,Private和Shared之间的区别在于页面是否仅由您正在检查的进程引用,或者它们是否已被多个进程引用.
总结如下:
> Shared_Clean是映射中已被此进程引用的页面,以及至少一个其他进程,但不是由任何进程编写的;
> Shared_Dirty是映射中已被此进程引用的页面,并且至少由其中一个进程编写;
> Private_Clean是映射中已读取但未由此进程写入但未被任何其他进程引用的页面;
> Private_Dirty是映射中已由此进程写入但未被任何其他进程引用的页面.
页面可以在写入时从“清理”移动到“脏”,在另一个进程引用它们时从“私有”移动到“共享”.