动态链接库与静态链接库的区别

 本文出自:http://blog.csdn.net/hongchangfirst

       很多人不明白什么是动态库,要想清楚的了解动态库,就必须知道静态库的缺点,以及为什么会出现动态库,它有什么优点。以下参考了作者的毕设论文《实时处理与监测评估系统软件集成模块设计与实现》2011论文。

 

       为什么会出现动态调用技术,因为将所有模块的源代码都静态编译到整个应用程序的可执行文件中,会产生两个主要的问题:

 

第一,有一些模块暂时不会被使用到,但也必须存在于进程的执行空间里;也有一些模块的功能可能较为通用,在构造其它软件系统时仍会被使用,但在各自的进程空间内必须出现多个相同的副本以满足每个进程的需要。前者增加了应用程序的大小,占用更多的磁盘空间,程序运行时也会消耗更大的内存空间,后者造成系统资源的浪费。

第二,在编写大的可执行程序时,在每次修改重建时都必须编译所有源代码,然后再发布给用户,增加了编译和发布过程的复杂性。

 

        动态调用技术是针对上面静态编译的两个问题而出现的,动态链接库(共享对象)只有在应用程序需要时才被系统加载到进程的虚拟空间中,成为调用进程的一部分,可参考 《进程的内存分配情况 》 ,位于堆与栈之间的空间,当多个程序使用同一个函数库时,动态调用技术可以减少在磁盘和物理内存中加载的代码的重复量。

 

       当动态链接库(共享对象)中的函数需要更新或修复时,部署和安装动态链接库(共享对象)不要求重新建立程序与该动态链接库(共享对象)的链接。此外,如果多个程序使用同一个动态链接库(共享对象),那么多个程序都将从该更新或修复中获益。

 

       动态调用技术在Linux下称之为共享对象(Shared Object),在Windows下称之为动态链接库(Dynamic Link Library),Linux使用第一个特点命名,而Windows使用第二个特点命名,但大家要明白这两者说的是同一种概念,只是实现机制有所不同。

 

      同时,动态调用技术也有缺点,由于是在程序运行时根据需要加载模块的,所以理所当然速度会受到一定的影响。而且操作系统对某个库的引用计数也会存在一些问题。

 

微笑

你可能感兴趣的:(windows,linux,object,library,磁盘)