什么是库文件?库文件是事先编译好的方法的合集。比如:我们提前写好一些数据公式的实现,将其打包成库文件,以后使用只需要库文件就可以,不需要重新编写。
决定一个应用程序性能的两个重要因素:启动时间和内存占用。应当尽可能地减少应用程序可执行文件的大小从使其启动更快,并在应用程序启动后尽可能减少对内存使用从而使其反应更快。
这里介绍一下静态库和动态库在应用程序中的使用中,占用应用程序可执行文件的大小和初始内存占用量的区别。
1、静态库应用程序的大部分功能是在可执行文件中的代码完成的。当应用程序使用静态链接器和库链接时,会将静态库的代码复制到生成的可执行文件中。静态链接器将已编译的源代码(目标文件)收集到可执行文件中,该文件在程序运行过程中会完整地加载到内存中。称为应用程序可执行文件的一部分的库称为静态库(static library)。
静态库也称为静态文档库(static archive libraries )和静态链接共享库(static linked shared libraries)。当应用程序启动时,应用程序的代码(包括与之链接的静态库的代码)将加载到应用程序相应的地址空间中。许多静态库链接到应用程序会生成大型的可执行文件。如下图所示,应用程序使用静态库来实现功能时所占用的内存的情况。
大型的可执行文件带来的是较长的启动时间和较大的内存占用。另外,当此静态库更新时,其对应的应用程序无法直接获益,必须将应用程序与新版本的静态库链接起来。用户必须用应用程序的最新版本代替原来的版本,给开发者和用户都带来不便。
2、动态库使用动态库(dynamic library),可以让应用程序在实际需要时(无论启动还是运行过程中),才将相应的库代码加载到相应的地址空间中。动态库不会静态链接到应用程序,也不会成为应用程序可执行文件的一部分。相反,动态库在应用程序启动时或运行过程中才加载动态库。
动态库也称为动态共享库(dynamic shared libraries),共享对象(shared objects)和动态链接库(dynamically linked libraries)。下图显示了如何将某些功能实现为动态库而非静态库,从而减少应用程序在启动后所占用的内存量。
动态库在更新时,应用程序可自动地从中获益,因为它们与库的链接是动态的,不是静态的。也就是说,应用程序可直接使用更新的动态库,而不需要开发人员重新编译。
另外,需要注意的一点是,开发人员在更新动态库时,应保证库的接口(application programming interface,API)不变,从而无需更改应用程序的代码。当库的API必须要修改时,库的先前版本需要保留,从而使应用程序正常运行。
来源:算法集市