什么可能导致静态二进制文本段不可共享?

时间:2011-01-07 21:19:34

标签: c linux

我正在尝试在Linux x86上搜索小二进制文件中不需要的脏页面。整个二进制文件小于4k页(它没有glibc编译)。在运行2.6.32内核的笔记本电脑上,.text/proc/$pid/smaps显示为Private_Clean: 4Private_Dirty: 0,正如所料,但在我的服务器上使用2.6.36,{{ 1}}是.text。知道是什么原因引起的吗?据我所知,没有地址布局随机化或类似的有效(我已经禁用了我所知道的所有相关设置)。知道什么可能弄乱程序的Private_Dirty: 4

修改

.text

并且......现在$ strace ~/em2 execve("/home/R/em2", ["/home/R/em2"], [/* 28 vars */]) = 0 nanosleep({100000, 0}, ^C <unfinished ...> smaps显示为.text。这很奇怪,因为我实际上有两个不同的二进制文件在不同的机器上编译,两者在我的服务器上运行时显示无法解释的脏页,现在它们都是干净的。抱歉浪费了每个人的时间。如果问题没有回来,我会关闭/删除这个问题或任何合适的问题,因为我再也无法复制它。

1 个答案:

答案 0 :(得分:2)

问题解决了:显然Linux有一个“功能”(我称之为bug),如果二进制文件在创建之后尚未刷新到磁盘,则页面显示为Private_Dirty。这就是为什么问题在一段时间后神秘地消失了。