加载时动态链接和运行时动态链接有什么区别?
答案 0 :(得分:15)
加载时动态链接
当构建时将可执行文件链接到DLL时,链接器不会插入对象代码,而是插入存根,它基本上表示此名称的函数位于此 DLL 。
现在,当运行可执行文件时,可执行文件的某些部分将会丢失(即函数存根),因此在允许程序运行之前,程序加载程序会通过替换它们来修复这些缺失的函数。入口点到DLL文件中。
只有在所有存根被替换(即已解决)后,才允许运行可执行文件。
这是加载时动态链接。
运行时动态链接
在这种情况下,可执行文件没有链接到任何DLL库文件,因此它不会在dll中包含任何存根,因此程序加载器在运行可执行文件时没有问题。
但是从DLL中获取函数的任务是留给可执行文件的,可以使用 GetProcAddress Windows API来完成。
这是运行时动态链接。
答案 1 :(得分:2)
你忘记了“家庭作业”标签。
加载时链接意味着无论您是否实际使用该DLL中的功能,都会在应用程序启动时加载您要链接的DLL。动态链接意味着DLL的功能仅在实际需要时加载。
答案 2 :(得分:0)
加载时间动态链接由加载应用程序时的操作系统执行。操作系统使用信息链接器放置在文件中以查找dll的名称,然后搜索这些dll,如果找不到Dll,它只是终止并给出错误消息,否则,OS将DLL映射到进程的虚拟地址空间并增加DLL引用计数。