库通俗的说就是把一些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。库是别人写好的现有的,成熟的,可以复用的代码,我们只需要知道其接口如何定义,便可以自如使用。
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。比如我们常用的printf函数,就是c标准库提供的函数。我们在使用只需要包含相应的头文件就可以使用(非静态编译还要有相应的库文件)。而不用关心printf函数具体是如何实现的,这样就大大提供了程序员编写代码的效率。从使用方法上分,库大体上可以分为两类:静态库和共享库。在windows中静态库是以.lib为后缀的文件,动态库是以.dll为后缀的文件。在linux中静态库是以.a为后缀的文件,动态库是以.so为后缀的文件。
静态库和动态库都是对目标文件的处理,也可以说库文件已经是机器码文件了。
静态库和动态库加载:
当程序与静态库链接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。不过会有个缺点:占用磁盘和内存空间。静态库会被添加到和它链接的每个程序中,而且这些程序运行时,都会被加载到内存中,无形中又多消耗了更多的内存空间。
与动态库链接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时,那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小,节省磁盘空间,更进一步,操作系统使用虚拟内存,使的一份动态库驻留在内存中被多个程序使用,也同时节约了内存。不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢些,总的来说静态库时牺牲了空间的效率,换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。
注:摘录以下博客
[这里写链接内容](http://blog.csdn.net/sunshinewave/article/details/39155755)
概念——静态库/动态库
最新推荐文章于 2023-11-19 23:28:35 发布