动态库与静态库的区别

来源:互联网 发布:知乎 大连佳禾外语 编辑:程序博客网 时间:2024/06/05 15:32
       方法库大体上可以分为两类:静态库和动态库(共享库)。在windows中静态库是以 .lib 为后缀的文件,动态库是以 .dll 为后缀的文件。在linux中静态库是以 .a 为后缀的文件,共享库是以 .so为后缀的文件。

       当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。不过会有个缺点: 占用磁盘和内存空间。静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 都会被加载到内存中,无形中又多消耗了更多的内存空间.
       与动态库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间,更进一步,操作系统使用虚拟内存,使得一份动态库驻留在内存中被多个程序使用,也同时节约了内存。不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些,总的来说静态库是牺牲了空间效率,换取了时间效率,动态库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。
       另外,一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,在接口不变的前提下,使用动态库的程序只需要将动态库重新编译就可以了,而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一遍。

       上述内容大致是动态库与静态库的明显区别。

参考链接:http://blog.csdn.net/sunshinewave/article/details/39155755


原创粉丝点击