在执行程序时,整个库是否会加载到内存 (RAM) 中

Whether the complete library will get loaded to memory (RAM) while execution of a program?

本文关键字:内存 加载 RAM 是否 执行程序      更新时间:2023-10-16

在静态和动态库的情况下会有什么不同?

我了解静态和动态库的创建和使用,但我对将库加载到主内存有疑问。 如果我们只从库中调用一个函数,静态/动态库是否会完全加载到 RAM。

例如,假设我们有 10MB 大小的库,并且我们只调用该库中的一个函数,是加载完整的库还是仅加载调用的函数对象代码? 静态和动态库的情况是否相同?(如果我们使用静态库可执行文件大小会更多,但是加载时间呢)

提前感谢!

Linux(与所有具有按需分页的现代操作系统一样)将在加载时映射整个库,但只有页面必须读取,例如:初始化库,解析所有外部(非延迟)符号。

这些任务大多委派给用户模式动态加载程序。

从未写入或之后由 KSM(内核同页合并)重新合并的部分图像只能存储一次,从而减轻了内存压力。

当需要动态链接时,内核引导动态 链接器(ELF 解释器),它初始化自身,然后加载 指定的共享对象(除非已加载)。

IBM:Linux 动态库剖析