我正试图在 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
。这很奇怪,因为我实际上有 2 个不同的二进制文件在不同的机器上编译,当在我的服务器上运行时,它们都显示莫名其妙的脏页,现在它们都是干净的。很抱歉浪费了大家的时间。如果问题不再出现,我将关闭/删除此问题或任何合适的内容,因为我无法再重现它。
最佳答案
问题已解决:显然 Linux 有一个“功能”(我称之为错误),如果二进制文件在创建后尚未刷新到磁盘,页面将显示为 Private_Dirty
.这就是问题在一段时间后神秘消失的原因。
关于c - 什么会导致静态二进制文件中的文本段不可共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4630398/