【发布时间】:2018-03-14 15:34:19
【问题描述】:
有两种方法可以链接共享库。
一种称为隐式动态链接,一种称为显式动态链接。
我用谷歌搜索了一些文档,但没有找到文档告诉两者的效率差异。
以 linux .so 文件为例。我的疑问是:隐式链接与显式方式相比,显式方式会以某种方式导致更多的 IO 或 cpu 或内存吗?
想知道哪种方式更有效,为什么?
非常感谢!
【问题讨论】:
有两种方法可以链接共享库。
一种称为隐式动态链接,一种称为显式动态链接。
我用谷歌搜索了一些文档,但没有找到文档告诉两者的效率差异。
以 linux .so 文件为例。我的疑问是:隐式链接与显式方式相比,显式方式会以某种方式导致更多的 IO 或 cpu 或内存吗?
想知道哪种方式更有效,为什么?
非常感谢!
【问题讨论】:
据我了解,隐式动态链接是通过在程序的依赖项部分添加库来说明您的程序需要该库才能运行的事实。如果在程序开始时没有找到该库,则程序根本不会被执行。
显式动态链接使用诸如“LoadLibrary”(Windows)或“dlopen”(Linux)之类的函数来在运行时加载库。这就是插件的本质,以及如何编写代码。
现在,执行显式动态链接会增加工作量和复杂性,我认为没有任何理由比隐式动态链接更有效。仅当您无法执行其他操作时才使用显式动态链接,例如根据某些运行时值加载库。
【讨论】:
RICHED32.DLL。如果没有LoadLibrary 调用,程序将无法启动(或崩溃)。