我有使用共享内存的多进程应用程序.我试图在我的应用程序中检测内存泄漏.我在/ 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是映射中已由此进程写入但未被任何其他进程引用的页面.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。