加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 动态链接,内存使用和并发

发布时间:2020-12-16 09:43:56 所属栏目:百科 来源:网络整理
导读:当可执行文件与静态库链接时,可执行文件仅包含代码中使用的必要库部件,对吧? 但是我错过了这个部分 – 如何使用共享对象(动态链接库)? 据我所知,它们不包含在可执行文件中,它们是使用dlopen动态加载的,这是由链接器直接完成的,对吧? 在这种情况下,这个库
当可执行文件与静态库链接时,可执行文件仅包含代码中使用的必要库部件,对吧?

但是我错过了这个部分 – 如何使用共享对象(动态链接库)?

据我所知,它们不包含在可执行文件中,它们是使用dlopen动态加载的,这是由链接器直接完成的,对吧?

在这种情况下,这个库位于内存中的哪个位置?我的意思是,这里有帖子,解释说动态库可以减少内存使用量,但究竟是怎么回事?如果动态库以某种方式加载到共享内存中(对于多个进程),在这种情况下内核如何处理并发?

我意识到这可能是根本性的,如果这是重复的话我很抱歉,我找不到这样的.
我知道Static linking vs dynamic linking,我问的是有点不同.

解决方法

共享库确实被加载到所有“用户”(使用相同库的所有应用程序)之间共享的内存中.

这基本上是通过引用计数完成的,因此对于库的每个新用户,引用都会计算在内.当应用程序退出时,引用计数将倒计时.如果它变为零,则不再需要库,并且将从内存中删除(很可能仅在“其他内容需要内存”时,而不是“立即”).引用计数由内核“原子地”完成,因此不存在并发冲突.

请注意,它只是共享库中实际共享的CODE.每个进程的任何数据部分都是私有的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读