经典面试题 动态链接库与静态链接库的区别

2023-05-16

经典面试题 动态链接库与静态链接库的区别

面试轻松学习,offer快点拿

文章目录

  • 经典面试题 动态链接库与静态链接库的区别
  • 一、动态链接库是什么?
  • 二、静态链接库是什么?
  • 三、区别
    • 1.静态链接库速度快,避免一些问题
      • 不足之处
    • 2.动态链接库可以随意移除,节省内存空间
      • 不足之处
  • 总结


一、动态链接库是什么?

动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、“.ocx”(包含ActiveX控制的库)或者 “.drv”(旧式的系统驱动程序)。

二、静态链接库是什么?

静态链接库就是你使用的.lib文件,库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。格式如:#pragma comment(lib,“XXX.lib”)

三、区别

1.静态链接库速度快,避免一些问题

  • 静态链接库是.lib格式的文件,一般在工程的设置界面加入工程中,程序编译时会把lib文件的代码加入你的程序中因此会增加代码大小。

  • 程序一运行lib代码强制被装入你程序的运行空间,不能手动移除lib代码。但是代码装载速度快,执行速度略比动态链接库快;

  • 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

静态链接库不同于动态链接库(.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

不足之处

使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费

2.动态链接库可以随意移除,节省内存空间

  • 使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
  • 动态链接库是程序运行时动态装入内存的模块,格式*.dll,在程序运行时可以随意加载和移除,节省内存空间。
  • 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,您无需重新生成或安装整个程序就可以应用更新。

不足之处

使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息


总结

通过以上两个例子可以轻松了解静态和动态的区别就是在链接时如何处理库函数,也就是如此导致的执行效率与使用方式的区别。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典面试题 动态链接库与静态链接库的区别 的相关文章

随机推荐

  • c语言int,unsigned char, bit之间转换

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 使用Document解析xml格式的文件(以P3C扫描结果为例)

    一 xml文件格式 xff08 以P3C扫描结果为例 xff09 二 示例代码 import org w3c dom import org xml sax SAXException import javax xml parsers Docu
  • Git Bash运行vue create xxx无法使用上下箭头选择

    一 问题 GitBash中使用vue create xxx创建项目 xff0c 上下箭头无法使用 二 解决方案 使用winpty vue cmd create xxx命令代替 vue create xxx 在gitbash 的 etc ba
  • Axios封装

    一 目的 对Axios进行一下通用化的封装 xff0c 目的是帮助简化代码和利于后期的更新维护 可以通用的配置如timeout baseURL等抽取出来 xff0c 对请求进行拦截处理等 xff0c 方便后期管理 二 步骤 1 准备工作 安
  • android 信息(mms)的故事(二) -- 存储

    关于android存储的有三种方式 xff1a SharePrference 文件系统和 数据库 xff0c 这些信息里都用到了 xff0c 数据库provider存储短信和彩信的基本信息 xff0c SharePrference存储关于信
  • 使用async、await实现多个方法先后执行

    一 场景 方法A需要先执行 xff0c 执行成功后返回结果 xff0c 作为方法B的入参 xff0c 然后执行方法B 二 实现 解决地狱回调问题 const getProductTotal 61 async 61 gt try const
  • Linux之yum安装出现Error: Multilib version problems found解决

    目录 安装mysql的依赖Yum过程中提示保护多库版本 解决方案 再次安装测试 安装mysql的依赖Yum过程中提示保护多库版本 yum y install libaio so 1 libgcc s so 1 libstdc 43 43 s
  • response.getWriter().write()和 response.getWriter().print()的区别

    response getWriter 返回的是PrintWriter xff0c 这是一个打印输出流 print response getWriter print 不仅可以打印输出文本格式的 xff08 包括html标签 xff09 xff
  • WdatePicker之使用

    一 动态变量表 格式 说明 y 当前年 M 当前月 d 当前日 ld 本月最后一天 H 当前时 m 当前分 s 当前秒 运算表达式 如 d 43 1 表示明天 F 之间是函数可写自定义JS代码 二 简单应用案例 0 引入WdatePicke
  • HTML之Unicode引用方式添加矢量图标(如阿里巴巴矢量图库)

    目录 一 阿里巴巴矢量图库下载 1 进入官网选择图库 2 下载项目中图标至本地 二 Unicode引用 1 特点 2 引用 xff08 此处使用阿里巴巴矢量图库 xff09 一 阿里巴巴矢量图库下载 1 进入官网选择图库 阿里巴巴矢量图标库
  • 每天一个adb命令:dumpsys命令详解

    dumpsys是一个能帮助我们对手机进行性能分析的命令 xff0c 它可以帮助我们获取电池 内存 cpu 磁盘 wifi等等信息 xff0c 具体能查询的信息可以通过命令 xff1a adb span class hljs built in
  • qt中QByteArray最多存储多少个字节?

    对QByteArray的测试 xff0c 加断点后发现最多可存储2147483647个字节 xff0c 如果超出2147483647个字节需要开辟内存进行数据存储 xff0c 环境为QT5 12 3 43 MSVC2017 如下 xff1a
  • python 求1+2+3+4+5......+100的和

    法一 xff1a x 61 0 给x赋值为0 y 61 0 给y赋值为0 while True while真 xff0c 循环开始 if 0 61 61 x 2 如果x和2的余数等于0 xff0c 那么x就为偶数 xff0c y的赋值就等于
  • Lottie 动画AE+Bodymovin导出的JSON文件解读

    lottie动画的json配置object 名称定义v使用bodymovin的版本assetes图片集合layers图层集合w视图的宽度h视图的高度ip起始关键帧op结束关键帧fr帧率 动画时间 61 op ip fr 在AE制作视频是的开
  • 前端传递参数给后端,一直返回400

    太久没写SpringBoot的代码了 xff0c 最近一直在刷题和复习基础 IO xff0c 集合 xff0c 反射 xff0c MySQL等 但是 xff0c 前两天突发奇想 xff0c 想写点东西 xff0c 然后就在我今天进行Swag
  • android 信息(mms)的故事(五)-- 发彩信

    发彩信和发短信一样 xff0c 在ComposeMessageActivity java界面都是从onclick xff08 xff09 sendMessage xff08 xff09 开始 xff0c 同样的发送前检查收件人是否有效 xf
  • linux系统无需设置密码自动登录用户

    cd etc lightdm 在lightdm conf文件中 xff0c 修改 autologin user 61 root 则主机开机时 xff0c 免密码登录root用户
  • 192.168.和10.0.开头的IP、内网IP段

    在这三类地址中 xff0c 绝大多数的IP地址都是公有地址 xff0c 需要向国际互联网信息中心申请注册 但是在IPv4地址协议中预留了3个IP地址段 xff0c 作为私有地址 xff0c 供组织机构内部使用 这三个地址段分别位于A B C
  • 教程:解决ArchLinux软件包管理器-Syu提示无法识别归档格式的问题.

    唔 到了今天为止总算是差不多忙完了暑假前自己所有剩下的项目qwq 总算可以有个闲时可以折腾Arch了 不过今天在配置软件包的时候却出现如下类型报错 xff1a 1 2 3 4 5 span class line style margin 0
  • 经典面试题 动态链接库与静态链接库的区别

    经典面试题 动态链接库与静态链接库的区别 面试轻松学习 xff0c offer快点拿 文章目录 经典面试题 动态链接库与静态链接库的区别一 动态链接库是什么 xff1f 二 静态链接库是什么 xff1f 三 区别1 静态链接库速度快 xff