静态链接和动态链接有什么区别

说白了,静态库就是先吃撑了,防止之后饿;动态库就是,把粮食带着,等饿了再吃

库:函数的集合    作用:共享代码

静态、动态指链接
程序编译过程中,在链接阶段,程序生成的汇编文件和库进行链接,生成可执行文件。


这里写图片描述

1.静态库
(.a .lib)

静态链接库在程序编译时被连接到目标代码中参与编译;链接时将库完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝;生成可执行程序之后,静态链接库不需要(因已将函数拷贝到可执行文件中)。

静态库特点:
1.静态库对函数库的链接是放在编译时期完成的
2.程序在运行时与函数库再无瓜葛,移植方便。
3.浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件
4.如果静态库进行更新则应用该库的所有程序都需要重新编译(全量更新)。

2.动态库
(.so .dll)
程序运行时由系统动态加载动态库到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

动态库特点:
1.动态库把对一些库函数的链接载入推迟到程序运行时期。
2.可以实现进程之间的资源共享。(因此动态库也称为共享库)
3.将一些程序升级变得简单。
4.甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)

区别:
1.时期:
静态库在编译时连接,在链接时拷贝
动态库在运行时连接
2.资源
静态库在每次使用时将全部连接进可执行程序,浪费资源。
动态库在使用时访问动态库中函数,节省资源。
3.更新升级
静态库更新,则每个使用该静态库的程序都需要更新,不易于更新升级
动态库仅更新自身,易于更新升级
4.包含其他库
静态链接库不能再包含其他动态链接库
动态链接库可以包含其他动态链接库

静态链接是在编译链接时直接将需要的执行代码拷贝到调用处;优点在于程序在发布时不需要依赖库,可以独立执行,缺点在于程序的体积会相对较大,而且如果静态库更新之后,所有可执行文件需要重新链接

动态链接是在编译时不直接拷贝执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定代码时,在共享执行内存中寻找已经加载的动态库可执行代码,实现运行时链接;优点在于多个程序可以共享同一个动态库,节省资源;缺点在于由于运行时加载,可能影响程序的前期执行性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是纠结伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值