.text 部分是否在加载的 ELF 可执行文件之间共享?

.text 部分是否在加载的 ELF 可执行文件之间共享?

例如,如果一个程序grep当前正在运行,并且用户执行另一个实例,那么这两个实例是否共享只读.text部分以节省内存?主要可执行文本共享的共享是否与共享库类似?

Linux 中是否存在这种行为?如果是这样,其他 Unices 也这样做吗?

如果在 Linux 中没有这样做,那么实现通常作为共享库并行运行多个实例的可执行文件是否会带来任何好处,而被调用的可执行文件只需调用库中的主函数?

答案1

Unix 共享可执行文件,共享库被称为共享(duh...),因为它们的内存映像在所有用户之间共享。

也就是说,如果我运行 bash(1) 的两个实例,并且在其中一个实例中运行 vim(1),那么我将在内存中各有一份 bash 和 vim 可执行文件的副本,并且(因为这两个程序都使用C 库)libc 的一份副本。

但更好的是:来自上述可执行文件/库(文件)的磁盘副本的 Linux 页面。所以留在内存中的只是那些最近使用过的页面。因此,很少使用的 vim 命令或 bash 错误处理、libc 中未使用的函数等代码只会占用磁盘空间,而不是内存。

相关内容