静态库和动态库的基本含义和特点

就是指在编译链接时将需要使用的函数或者类全部打包进目标文件中“在运行时直接调用目标文件中的代码”因为所有需要使用的代码都已经被打包进了目标文件中。

作为程序员,我们在编写代码时经常会用到一些函数或者类,这些函数或者类可能会被多个程序调用。如果每个程序都要自己实现这些函数或者类,那么就会造成大量的重复劳动,而且还容易导致代码混乱不堪。为了解决这个问题,我们可以将一些常用的函数或者类打包成一个库文件,供多个程序共享使用。在 Windows 系统中常见的两种库文件就是静态库和动态库。

什么是静态库?

顾名思义,“静态”代表着“不变”,因此所谓“静态库”就是指在编译链接时将需要使用的函数或者类全部打包进目标文件中,在运行时直接调用目标文件中的代码。因为所有需要使用的代码都已经被打包进了目标文件中,所以无需再加载其他模块,在运行速度上比较快。

通常情况下我们把以.lib作为后缀名的二进制链接格式称之为静态链接库(Static Library) 或 静态链接形式(Static Linkage) 的目标模块。

什么是动态库?

与之相对应,“动态”代表着“变化”,因此所谓“动态库”就是指在编译链接时只将需要使用的函数或者类的引用打包进目标文件中,在运行时再根据需要去加载其他模块。由于在运行时还需要加载其他模块,因此相对于静态库来说会慢一些,但是可以大大减小目标文件的大小。

通常情况下我们把以.dll作为后缀名的二进制链接格式称之为 动态链接库(Dynamic Link Library) 或 动态链接形式(Dynamic Linkage) 的目标模块。

静态库和动态库的特点

静态库和动态库虽然都是用来打包函数或者类供多个程序共享使用,但它们之间还是有很多不同之处。

1. 目标文件大小

静态库将所有代码全部打包进了目标文件中,因此目标文件会比较大;而动态库只将一部分代码打包进了目标文件中,在运行时再去加载其他模块,因此相对比较小。

静态库和动态库的基本含义和特点

2. 运行速度

由于所有代码都已经被打包进了目标文件中,所以无需再加载其他模块,在运行速度上比较快。而动态库则需要在运行时才能确定要调用哪些函数或者类,并且还要去加载其他模块,因此相对比较慢。

3. 应用范围

静态库适用于程序比较小的情况下,因为一旦程序使用了静态库中的函数或者类,就会将这些代码全部打包进目标文件中,导致目标文件变得非常大。而动态库则适用于程序比较大的情况下,因为只有在需要使用某个函数或者类时才会去加载对应的模块。

4. 更新维护

如果静态库中有代码需要更新,则需要重新编译整个程序,并且重新发布;而如果动态库中有代码需要更新,则只需要替换对应的模块即可。

静态库和动态库都是供多个程序共享使用的打包形式,它们之间存在着很多不同之处。选择哪种方式取决于具体情况,在实际开发过程中也要根据不同需求进行选择和使用。