我认为Implicit链接在应用程序启动后立即加载DLL,因为它也被称为"加载时动态链接"。但我在下面的链接(https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx)中找到了一些奇怪的解释。
隐式链接
与程序代码的其余部分一样,DLL代码映射到地址中 进程启动并加载进程时进程的空间 只在需要时记忆。因此,PRELOAD和LOADONCALL代码 .def文件用于控制先前版本中的加载的属性 Windows不再具有意义。
明确链接
隐式链接到许多DLL的应用程序可能很慢 启动,因为Windows加载应用程序时加载所有DLL。 为了提高启动性能,应用程序可以隐式链接到 加载后立即需要这些DLL并等待显式 在需要时链接到其他DLL。
从此处隐式链接的另一种解释(https://msdn.microsoft.com/en-us/library/151kt790.aspx)。
隐式链接
Visual C ++链接器现在支持DLL的延迟加载。这个 使您无需使用Windows SDK函数LoadLibrary 和GetProcAddress实现DLL延迟加载。
在Visual C ++ 6.0之前,在运行时加载DLL的唯一方法是 使用LoadLibrary和GetProcAddress;操作系统会加载 使用它的可执行文件或DLL加载时的DLL。
从Visual C ++ 6.0开始,当与DLL静态链接时, 链接器提供了延迟加载DLL的选项,直到程序调用 该DLL中的一个函数。
应用程序可以使用/ DELAYLOAD(延迟加载)延迟加载DLL 带有辅助函数的Import)链接器选项(默认实现 由Visual C ++提供)。辅助函数将在运行时加载DLL 时间通过为您调用 LoadLibrary 和 GetProcAddress 。
我真的很困惑,也不知道如何理解这些。
1。隐式链接是在启动时加载DLL还是仅在调用DLL中的函数时加载?
2。这意味着两者最终都是类似的,因为LoadLibrary()是在引擎盖下调用的吗?
答案 0 :(得分:0)
@ remy-lebeau在他的评论中提供了很好的解释。我会在这里尝试作为答案。
here说明了隐式和显式dll加载之间的区别。 简而言之:
隐式加载具有许多优点,但由于在此阶段加载了所有dll,因此减慢了应用程序的加载时间。
为解决此问题,Microsoft支持Delayed Loaded Dlls,这是类型的隐式加载。
通过使用它,您可以享受隐式加载的所有好处,但是仅当您的应用程序调用其函数之一时,才会加载dll。
对您的问题: