Linux_动态库与静态库(其一)

打印 上一主题 下一主题

主题 865|帖子 865|积分 2595

1.动态库和静态库的定义
动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在步伐运行的时间才去链接动态库的代码,可以被多个步伐共享使用,通常以 .so 结尾。
静态库(.a):静态库是将一组目标文件(.o文件)打包成一个单一的归档文件。在编译时,链接器会将所需的目标文件代码复制到最终生成的可执行文件中,步伐运行的时间将不再需要静态库,通常以.a结尾。
库的命名规则:
lib+库名+后缀(.s/.so等)
eg:libc.so的库名为c,其表现c语言动态库

eg:libc.a的库名为c,其表现c语言静态库

2.动静态步伐的运行过程:

静态可执行步伐
加载:因为可执行步伐包含头文件所有方法和main函数,所以加载到内存比较大。
在内存的步伐代码通过页表对应进程地址空间的正文代码段
如果其他进程也需要使用C库,内存中没有加载C库,C库在静态可执行步伐中,所以其他进程还要重新加载C库,浪费了内存空间
动态可执行步伐
加载:除了代码加载到内存,其所使用的方法也会被加到内存。所以加载比较小
内存中的代码映射到进程地址空间的正文代码段,所使用的方法映射到栈和堆区之间的共享区
如果其他进程也需要使用C库,则只要调解其他进程的映射关系到已经在内存加载好的C库即可,
不需要重复加载,节省内存空间
3.查看可执行步伐依赖的动态库(ldd)

ldd主要用于查看动态库的依赖关系,而静态库在编译时会被直接链接到可执行文件中,因此通常不会表现依赖。

4.静态库与动态库的优缺点
静态库
缺点:
1).加载到内存时所占空间大
2).多个进程使用同一库会导致内存资源浪费
优点:
1).与库无关,库已经链接在可执行步伐中,删除库后仍可运行
2).步伐不依赖于库,跨平台性更强
动态库
缺点:
1).依赖库,如果可执行步伐生成后,删除库则无法运行这个可执行步伐
优点:
1).节省内存空间资源
对比动态可执行步伐与静态可执行步伐所占内存的差异:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表