加载时间和运行时动态链接之间的差异

时间:2009-02-16 04:14:23

标签: dll

加载时动态链接和运行时动态链接有什么区别?

3 个答案:

答案 0 :(得分:15)

加载时动态链接

当构建时将可执行文件链接到DLL时,链接器不会插入对象代码,而是插入存根,它基本上表示此名称的函数位于此 DLL

现在,当运行可执行文件时,可执行文件的某些部分将会丢失(即函数存根),因此在允许程序运行之前,程序加载程序会通过替换它们来修复这些缺失的函数。入口点到DLL文件中。

只有在所有存根被替换(即已解决)后,才允许运行可执行文件。

这是加载时动态链接。

运行时动态链接

在这种情况下,可执行文件没有链接到任何DLL库文件,因此它不会在dll中包含任何存根,因此程序加载器在运行可执行文件时没有问题。

但是从DLL中获取函数的任务是留给可执行文件的,可以使用 GetProcAddress Windows API来完成。

这是运行时动态链接。

答案 1 :(得分:2)

你忘记了“家庭作业”标签。

加载时链接意味着无论您是否实际使用该DLL中的功能,都会在应用程序启动时加载您要链接的DLL。动态链接意味着DLL的功能仅在实际需要时加载。

答案 2 :(得分:0)

加载时间动态链接由加载应用程序时的操作系统执行。操作系统使用信息链接器放置在文件中以查找dll的名称,然后搜索这些dll,如果找不到Dll,它只是终止并给出错误消息,否则,OS将DLL映射到进程的虚拟地址空间并增加DLL引用计数。