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