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

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

编辑:

$strace ~/em2
execve("/home/R/em2", ["/home/R/em2"], [/* 28 vars */]) = 0
nanosleep({100000, 0}, ^C <unfinished ...>

而…..现在smaps显示.text作为Private_Clean:4.这很奇怪,因为我实际上有两个不同的二进制文件在不同的机器上编译,这些二进制文件在我的服务器上运行时都显示了无法解释的脏页,现在它们’两个都干净.抱歉浪费了每个人的时间.如果问题没有回来,我将关闭/删除这个问题或任何合适的问题,因为我再也无法复制它.

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

点赞