例如grep
,如果一个程序正在运行,而用户执行另一个实例,这两个实例是否共享它们之间的只读.text
部分以节省内存?主要可执行文本共享的共享是否与共享库类似?
这种行为是否在 Linux 中表现出来?如果是这样,其他 Unices 也这样做吗?
如果这不是在 Linux 中完成的,那么实现通常作为共享库并行运行多个实例的可执行文件是否会带来任何好处,而被调用的可执行文件只是调用库中的 main 函数?
例如grep
,如果一个程序正在运行,而用户执行另一个实例,这两个实例是否共享它们之间的只读.text
部分以节省内存?主要可执行文本共享的共享是否与共享库类似?
这种行为是否在 Linux 中表现出来?如果是这样,其他 Unices 也这样做吗?
如果这不是在 Linux 中完成的,那么实现通常作为共享库并行运行多个实例的可执行文件是否会带来任何好处,而被调用的可执行文件只是调用库中的 main 函数?
Unix 共享可执行文件,共享库被称为共享(duh ...),因为它们的内存映像在所有用户之间共享。
即,如果我运行 bash(1) 的两个实例,并在其中一个实例中运行 vim(1),我将在内存中分别拥有一个 bash 和 vim 可执行文件的副本,并且(因为两个程序都使用C 库)一份 libc。
但更好的是:来自上述可执行文件/库(文件)的磁盘副本的 Linux 页面。所以留在内存中的只是那些最近使用过的页面。因此,很少使用 vim 命令或 bash 错误处理的代码、未使用 libc 中的函数等等只会占用磁盘空间,而不是内存。