来源:辣条科技站Gamer发布时间: 2024-10-03 09:58:25
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).节省内存空间资源
对比动态可执行程序与静态可执行程序所占内存的差异:
热门推荐
闪字幕破解版下载-闪字幕VIP破解版-闪字幕手机破解版-闪字幕视频制作破解版下载安装v1.10.1
2023-01-14 15:37:59诸侯大本营貂蝉怎么样
2023-02-18 02:19:22莱特法语背单词app下载-莱特法语背单词安卓版下载v1.0.0
2023-03-16 08:14:20腾讯会议app下载安卓手机版-腾讯会议app官方下载v3.16.3.477 免费最新版本
2023-04-25 09:58:10城市超级怪物英雄手游下载-城市超级怪物英雄安卓版免费下载v1.0
2023-05-23 17:57:17摇光录乱世公主手游下载-摇光录乱世公主免费安卓版下载v0.1.7
2023-06-13 21:08:37人气榜