静态链接和动态链接的区别

在理解静态和动态(共享)库链接之间的区别之前,让我们先看一个典型程序的生命周期。从编写源代码到执行它。首先使用任何程序员选择的编辑器以文本文件的形式编写程序,然后必须对其进行编译以将文本文件转换为机器可以理解和执行的目标代码。

通常我们编写的程序可能会使用其他程序或程序库。 我们编写的程序必须与这些其他程序或库一起才能执行。

链接是将我们编写的外部程序成功执行所需的外部程序组合在一起的过程。 静态链接和动态链接是收集和组合多个目标文件以创建单个可执行文件的两个过程。 在这里,我们将讨论它们之间的区别

链接可以在两次编译时执行:当源代码翻译成机器代码时; 或将程序加载到内存中时,甚至在运行时由应用程序加载。 它由称为链接器的程序执行。链接器也称为链接编辑器。 链接是编译程序的最后一步。

链接后,要执行该组合程序,必须将其移入内存。为此,必须为数据和指令分配地址以执行程序。 以上过程可以概括为程序生命周期(写->编译->链接->加载->执行)。

以下是静态链接和动态链接之间的主要区别:
(1)静态链接是将程序中使用的所有库模块复制到最终可执行映像中的过程。 这是由链接器执行的,并且是编译过程的最后一步。 链接器将库例程与程序代码结合在一起,以便解析外部引用,并生成适合装入内存的可执行映像。 加载程序后,操作系统会将包含可执行代码和数据的单个文件放入内存。 该静态链接文件包括调用程序和被调用程序。
在动态链接中,外部库(共享库)的名称放置在最终的可执行文件中,而实际链接是在运行时将可执行文件和库都放置在内存中时进行的。 动态链接使多个程序可以使用可执行模块的单个副本。
(2)静态链接由链接程序执行,是编译程序的最后一步。 链接器也称为链接编辑器。动态链接由操作系统在运行时执行。
(3)静态链接文件的大小明显更大,因为外部程序内置在可执行文件中。
在动态链接中,共享库中只有一个副本保留在内存中。 这大大减小了可执行程序的大小,从而节省了内存和磁盘空间。
(4)在静态链接中,如果任何外部程序已更改,则必须重新编译并重新链接它们,否则更改将不会反映在现有的可执行文件中。
在动态链接中不是这种情况,可以更新和重新编译各个共享模块。 这是动态链接所提供的最大优势之一。
(5)静态链接的程序每次将其加载到内存中执行时,都会花费恒定的加载时间。
在动态链接中,如果共享库代码已存在于内存中,则可以减少加载时间。
(6)使用静态链接库的程序通常比使用共享库的程序快。
使用共享库的程序通常比使用静态链接库的程序要慢。
(7)在静态链接程序中,所有代码都包含在一个可执行模块中。 因此,它们永远不会遇到兼容性问题。
动态链接的程序依赖于具有兼容的库。 如果更改了库(例如,新的编译器版本可能更改了库),则可能必须重新设计应用程序以使其与该库的新版本兼容。 如果从系统中删除了一个库,则使用该库的程序将不再起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值