首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
躺平怪
中南大学 C++
发布于湖南
关注
已关注
取消关注
@编程十万问:
『面试问答』:静态链接和动态链接的区别是什么?
面试官:请说一下,静态链接和动态链接的区别是什么?一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)4步才能变成可执行文件。程序代码首先经过预处理器生成 .i 文件。然后通过编译器生成 .s 汇编文件,再通过汇编器生成 .o 目标文件,最后通过链接器链接生成可执行文件。在链接阶段,根据链接过程中处理方式的不同,链接可以分为静态链接和动态链接。静态链接是在链接阶段,就把所有需要的函数的二进制代码都包含到可执行文件中去,完成所有符号引用的一种链接方式。而动态链接在链接的时候不直接拷贝相应依赖库的代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,由操作系统负责将需要的依赖库加载到内存中,然后程序在运行到指定代码时,去执行内存中已经加载的依赖库的代码,最终达到运行时链接的目的。静态链接和动态链接对应的链接库也不同,可分为两种,分别是静态链接库和动态链接库,在Linux中,静态链接库文件以.a作为文件后缀,动态链接库以.so作为文件后缀。静态库会在链接阶段将静态库中的代码复制到可执行文件中,当程序在执行的时候,在可执行文件中本身就有了静态库的代码,可以直接调用。动态库则不会将代码打包到可执行文件中,而是打包动态库的名称等信息,在可执行程序运行的时候,需要去找到动态库的文件,然后把动态库加载到内存中才可以使用动态库中的代码。静态库被打包到可执行程序中,生成的可执行文件较大,但是程序加载运行速度会比较快,发布程序时,也无需提供静态库,移植比较方便。但是当多个程序链接同一个静态库时,生成的每一个可执行文件中,都会含有这个静态库,相当于在内存中同时运行着两个相同的静态库,比较浪费系统资源。另外,当静态库的内容发生更新时,依赖该静态库的程序也需要重新进行链接,导致程序的更新升级会比较麻烦。动态库可以实现进程间资源共享,比如可执行程序A在运行时用到了某个动态库,那么系统会将该动态库的代码动态加载到内存中,此时若正在运行的程序B也需要用到该动态库中的代码,则不需要再次加载该动态库,而是可以与程序A共享。此外,当动态库的内容更新时,只需重新编译生成新的动态库即可,而不需要对依赖该动态库的程序重新进行编译链接。
点赞 1
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-20 08:50
蚌埠坦克学院 嵌入式软件开发
得力嵌入式工程师 二面 面经
1. 你在项目中遇到过最棘手的技术问题是什么?如何解决的?问题背景:在一个工业控制器项目中,设备在现场运行一段时间后会偶发性死机,但在实验室环境下无法复现,这个问题困扰了团队近一个月。问题分析过程:首先我们怀疑是硬件问题,检查了电源纹波、信号完整性、EMC等,都没有发现明显异常。然后转向软件排查,通过在关键位置添加日志记录,发现死机前系统会出现异常的内存访问。深入排查:我注意到现场环境温度变化较大(-10℃到50℃),而实验室是恒温的。于是在高低温箱中进行测试,终于复现了问题。通过JLINK调试发现,是Flash读取时序在极端温度下出现了问题,导致读取到错误的指令。解决方案:调整Flash等待...
嵌入式面试八股文全集
点赞
评论
收藏
分享
今天 08:42
浙江大学 算法工程师
小红书C++ 软件开发一面 面经
1. 自我介绍,说说你为什么想加入小红书回答框架:教育背景和技术能力项目经验和技术亮点对小红书的了解和兴趣为什么选择这个岗位2. 手撕算法:合并两个有序链表(保留原题)题目:将两个升序链表合并为一个新的升序链表并返回。答案: struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(nullptr) {} }; ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode dummy(0); ListNode* tail = &dum...
C++八股文全集
点赞
评论
收藏
分享
01-17 13:17
大连民族大学 前端工程师
27 届前端简历求锐评
想在 3 月开学前找到实习…第一个项目有点忘记了 这正常吗 ,现在八股和 hot100 还没开始背🥲 哎 哪位大哥可以给我一点建议吗
点赞
评论
收藏
分享
01-15 07:26
吉首大学 算法工程师
清华大学前端实习生
27届第一段实习,本来打算投投看没想到拿offer了。这种大学的实习是啥意思,和正常的互联网实习有啥区别。应该选哪个比较好。
哞客37422655...:
老师自己开的那种接私活的吧
点赞
评论
收藏
分享
今天 20:13
门头沟学院 C++
Momenta C++ ⼀⾯凉经
进程内存飙升时你会用什么命令排查?先找高内存进程,再看内存构成,最后判断是否泄漏或缓存失控。常用命令:ps aux --sort=-%mem | headtop -p <pid> / htoppmap -x <pid>cat /proc/<pid>/status(看 VmRSS、VmSize)测试环境可用:valgrind --leak-check=full ./app你怎么查看 CPU 状态?从系统、核、进程三层判断是否 CPU 瓶颈或 IO wait 偏高。常用命令:uptime / topmpstat -P ALL 1pidstat -u 1vmsta...
C++面试总结
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
嵌入式应届生春招怎么准备——从零到拿 Offer 的系统攻略
773
2
...
关于租房
470
3
...
27届实习近一年的年度经历和总结
390
4
...
HTTP 和 HTTPS 区别
368
5
...
agent实习都干什么?prompt设计
245
6
...
这个简历可以去找暑期实习了吗
202
7
...
得力嵌入式工程师 二面 面经
195
8
...
大三无实习
195
9
...
美团推荐算法一面
193
10
...
27前端双非找实习
171
创作者周榜
更多
正在热议
更多
#
牛客新年AI问运
#
13881次浏览
168人参与
#
你最讨厌面试被问什么
#
1204次浏览
26人参与
#
牛客AI体验站
#
17859次浏览
302人参与
#
有转正机会的小厂实习值得去吗?
#
466次浏览
18人参与
#
牛友们,签完三方你在忙什么?
#
137363次浏览
993人参与
#
担心入职之后被发现很菜怎么办
#
282486次浏览
1185人参与
#
如何缓解入职前的焦虑
#
258845次浏览
1451人参与
#
校招第一份工作你干了多久?
#
139383次浏览
609人参与
#
去年的flag与今年的小目标
#
34248次浏览
337人参与
#
牛客租房专区
#
151393次浏览
1479人参与
#
秋招开始捡漏了吗
#
229455次浏览
1044人参与
#
九月了,是考研还是就业?
#
89239次浏览
556人参与
#
秋招投递攻略
#
268786次浏览
2553人参与
#
这份实习,有没有动摇过你的职业方向?
#
2155次浏览
39人参与
#
搜狐工作体验
#
4116次浏览
29人参与
#
机械人求职现状
#
33640次浏览
297人参与
#
我是XXX,请攻击我最薄弱的地方
#
61778次浏览
409人参与
#
用友工作体验
#
18083次浏览
151人参与
#
你的工资什么时候发?
#
57468次浏览
355人参与
#
你的实习什么时候入职
#
348073次浏览
2291人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务