在 Linux 中(不确定是否适用于 Windows,也欢迎任何相关知识),当只需要一小部分共享库时,使用一种名为延迟绑定的技术来提高性能,想象一下当您使用 -h --help arg 调用程序时等等
我想知道它是如何实现的?与操作系统虚拟内存管理的延迟分配技术有关吗?即,不是将所有指令加载到内存中,而是首先进行到未映射内存的映射,并且仅在运行时真正需要/引用时才加载有效内存。
不,这些是不相关的,尽管在这种情况下两者都有助于提高性能。
库绑定是通过函数指针数组实现的。数组本身由链接器静态分配,并且是可执行文件的一部分。绑定涉及用函数的实际地址填充该数组。
惰性绑定会跳过数组填充。相反,该数组预先填充了指向绑定例程的指针。当一个函数被调用时 - 它被绑定:它们的数组槽被替换为实际地址。从未被调用的函数,永远不会被绑定。