c - 什么会导致静态二进制文件中的文本段不可共享?

标签 c linux

我正试图在 Linux x86 上的小型二进制文件中追踪不需要的脏页。整个二进制文件小于 4k 页(它是在没有 glibc 的情况下编译的)。在我运行 2.6.32 内核的笔记本电脑上,.text/proc/$pid/smaps 中显示为 Private_Clean: 4Private_Dirty: 0,正如预期的那样,但在我的 2.6.36 服务器上,.textPrivate_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/

相关文章:

c - 如何根据传递给函数的字符返回字符数组?

c - 如何链接链表中的不同节点并遍历它

php - 在 Linux 中从文件句柄确定文件路径

c - Posix Timer 周期性地向前跳过其周期的一半

linux - 在 Automic 12 bash 中,mailx 正文中的特殊字符导致正文作为二进制文件附加

linux - 什么时候CPSR GE[3 :0] bits be modified

将字符串从 strftime 转换为 int/long

c - 我的 for 循环响应不正确

c - 为什么进程之间没有切换

linux - libinput 在 docker 容器中