共享库的延迟绑定是通过操作系统延迟分配虚拟内存来实现的吗?

问题描述 投票:0回答:1

在 Linux 中(不确定是否适用于 Windows,也欢迎任何相关知识),当只需要一小部分共享库时,使用一种名为延迟绑定的技术来提高性能,想象一下当您使用 -h --help arg 调用程序时等等

我想知道它是如何实现的?与操作系统虚拟内存管理的延迟分配技术有关吗?即,不是将所有指令加载到内存中,而是首先进行到未映射内存的映射,并且仅在运行时真正需要/引用时才加载有效内存。

linux dll operating-system shared-libraries virtual-memory
1个回答
0
投票

不,这些是不相关的,尽管在这种情况下两者都有助于提高性能。

库绑定是通过函数指针数组实现的。数组本身由链接器静态分配,并且是可执行文件的一部分。绑定涉及用函数的实际地址填充该数组。

惰性绑定会跳过数组填充。相反,该数组预先填充了指向绑定例程的指针。当一个函数被调用时 - 它被绑定:它们的数组槽被替换为实际地址。从未被调用的函数,永远不会被绑定。

© www.soinside.com 2019 - 2024. All rights reserved.