我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。
谢谢阿迪亚
我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。
谢谢阿迪亚
libc 的一个实例在所有进程之间共享。请参阅“共享库和动态加载的内幕”文章:
具体来说,由于库主要由可执行指令组成,并且此代码通常不会自我修改,因此操作系统可以安排将库代码放置在进程之间共享的只读内存区域中(使用页面共享和其他虚拟内存技术)。因此,如果数百个程序正在运行并且每个程序都包含相同的库,则操作系统可以将库指令的单个共享副本加载到物理内存中。这减少了内存使用并提高了系统性能。
另请参阅“剖析共享库”一文。