动态链接的优点

动态链接在静态链接上具有以下优势:

  • 在同一基址上加载同一 DLL 的多个进程在物理内存中共享 DLL 的单个副本。 这样做可以节省系统内存并减少交换。
  • DLL 中的函数发生更改时,只要函数参数、调用约定和返回值不更改,就不需要重新编译或重新链接使用这些函数的应用程序。 相比之下,静态链接的对象代码要求在函数更改时重新链接应用程序。
  • DLL 可以提供市场后支持。 例如,可以修改显示驱动程序 DLL 以支持最初交付应用程序时不可用的显示。
  • 使用不同编程语言编写的程序可以调用相同的 DLL 函数,只要程序遵循函数使用的相同调用约定。 调用约定(如 C、Pascal 或标准调用)控制调用函数必须将参数推送到堆栈的顺序,无论是函数还是调用函数负责清理堆栈,以及是否在寄存器中传递任何参数。 有关详细信息,请参阅编译器附带的文档。

使用 DLL 的潜在缺点是应用程序不是自包含的;这取决于单独的 DLL 模块是否存在。 当进程在启动时需要的 DLL 未找到时,系统会使用加载时动态链接来终止进程,并向用户提供错误消息。 在这种情况下,系统不会使用运行时动态链接终止进程,但缺少 DLL 导出的函数对程序不可用。