【发布时间】:2011-04-21 07:12:22
【问题描述】:
我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。
谢谢 阿迪亚
【问题讨论】:
标签: shared-libraries process loading libc
我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。
谢谢 阿迪亚
【问题讨论】:
标签: shared-libraries process loading libc
libc 的一个实例在所有进程之间共享。见"The Inside Story On Shared Libraries And Dynamic Loading"文章:
具体来说,由于库主要由可执行指令组成,而且这些代码通常不会自我修改,因此操作系统可以安排将库代码放置在进程之间共享的只读内存区域中(使用页面共享和其他虚拟内存技术)。因此,如果数百个程序正在运行并且每个程序都包含相同的库,则操作系统可以将库指令的单个共享副本加载到物理内存中。这样可以减少内存使用并提高系统性能。
【讨论】: