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

        大家都知道应用程序有两种链接方式,一种是静态链接,一种是动态链接,这两种链接方式各有好处。

        所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。

        动态链接是相对静态链接而言的,动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。一般情况下,如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品

        静态链接的可执行文件能够在其他同类操作系统上直接运行。例如,一个exe文件是在Windows 2000系统上静态链接的,那么将该文件直接拷贝到另一台Windows 2000的机器上,是可以运行的。而动态链接的可执行程序则不一定可以,除非把该exe文件所需的dll文件都一并拷贝过去,或者对方机器上也有所需的相同版本的dll文件,否则不能保证正常运行。

        静态链接库是.lib格式的文件,一般在工程的设置界面加入工程中,程序编译时会把lib文件的代码直接链接进目标程序中,因此会增加代码大小,静态链接的可执行文件会大一些,程序运行的时候不再需要其它的库文件,不能手动移除lib代码。

        动态链接库是一个包含可由多个程序同时使用的代码和数据的库,它是包含函数和数据的模块,格式.dll。程序运行时动态加载这些模块,运行时可以随意加载和移除,节省内存空间

        动态链接库和静态链接库的相同点是它们都实现了代码的共享,不同点是静态链接库lib文件中的代码被包含exe文件中,该lib中不能再包含其他动态链接或者静态链接的库了。而动态链接库dll可以被调用的exe动态地“引用”和“卸载”,一个dll中可以包含其他动态链接库或者静态链接库。在大型的软件项目中一般要实现很多功能,如果把所有单独的功能写成一个个lib文件的话,程序运行的时候要占用很大的内存空间,导致运行缓慢;但是如果将功能写成dll文件,就可以在用到该功能的时候调用功能对应的dll文件,不用这个功能时将dll文件移除内存,这样可以节省内存空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值