首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年10月02日 22:23

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).节省内存空间资源

对比动态可执行程序与静态可执行程序所占内存的差异:

From:https://www.cnblogs.com/sunnyhengheng-cn/p/18445261
本文地址: http://www.shuzixingkong.net/article/2447
0评论
提交 加载更多评论
其他文章 Blazor开发框架Known-V2.0.13
大家好,国庆节快乐,Known又更新了一波功能。 继上个版本以来,一直在完善网站文档、KnownCMS开源项目和解决框架客户提出的一些问题。这期间客户反馈的问题主要如下: 微信模板消息收不到,查其原因是网络问题,因此本版本改成后台任务发送消息 无代码页面模板需要自定义 无代码表单字段组件需要自定义
Blazor开发框架Known-V2.0.13
C++指针等于地址加偏移量
概述 本文通过c++示例代码演示指针的加减法运算及对 “指针 = 地址 + 偏移量” 的理解。 研究示例 1. 首先来检查各种变量类型所占的内存大小 #include <iostream> using namespace std; int main(){ cout << si
C++指针等于地址加偏移量 C++指针等于地址加偏移量
transaction_timeout:达到事务超时时终止会话
功能实现背景说明 我们已经有两个参数来控制长事务:statement_timeout 和 idle_in_transaction_session_timeout。但是,如果事务执行的命令足够短且不超过 statement_timeout,并且命令之间的暂停时间适合 idle_in_transacti
transaction_timeout:达到事务超时时终止会话 transaction_timeout:达到事务超时时终止会话 transaction_timeout:达到事务超时时终止会话
《痞子衡嵌入式半月刊》 第 108 期
痞子衡嵌入式半月刊: 第 108 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回
《痞子衡嵌入式半月刊》 第 108 期 《痞子衡嵌入式半月刊》 第 108 期 《痞子衡嵌入式半月刊》 第 108 期
Nuxt.js 应用中的 app:redirected 钩子详解
title: Nuxt.js 应用中的 app:redirected 钩子详解 date: 2024/10/3 updated: 2024/10/3 author: cmdragon excerpt: app:redirected 是 Nuxt.js 中的一个钩子,主要用于处理服务器端渲染(SSR)
Nuxt.js 应用中的 app:redirected 钩子详解 Nuxt.js 应用中的 app:redirected 钩子详解
全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串
在Python中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些字节的实际数据结构,字节序列和可变字节字符串的主要区别在于其可变性和用途,bytearray是可变的字节序列,允许修改其内容。
全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串
C++函数指针详解
本文详细介绍了C/C++中的普通函数和类的成员函数的指针。结合C++代码示例讲解了函数指针作为其他函数的输入、返回值以及typedef如何提高代码可读性的实用技巧。对于类的成员函数(方法)指针,则分为静态和非静态两种情况。最后总结了普通函数、类的非静态成员函数、类的静态成员函数的声明、赋值和定义的C
基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上
本教程使用工具所使用的环境说明: 启动器开发工具:VS2022 启动器所用客户端技术:.NET 8 + WPF 启动器其他技术:DPAPI 启动器发布的可执行程序,系统要求:Windows 7以及以上,X64 如果需要本程序,可以在网盘获取。网盘地址: 通过网盘分享的文件:RemoteShadowA
基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上 基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上 基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上