【kernel】动态链接库.so在内存中的情况
无论在flash中还是在内存中都只有一份,当不同的进程调用到同一个.so中的内容时,内存中也只有一份.so
.so在第一个调用它的进程加载时,加载到内存中,但是它的代码段并不分布在进程的地址空间中,它只留下了一份内存映像在进程地址空间中的映射区
(映射区很神奇,进程地址空间中这段地址的页表都相同,也就是说指向了同一组物理页)
这里可以和共享内存联系起来说,共享内存也是可以被多个进程所共享,但是共享内存共享的是数据,而动态库共享的是代码段,每个进程还是要自己提供存储数据的区域
内存中的动态代码只有一份副本,但动态库的数据仍然可能有多份副本,因为每一个链接到动态的进程都可能会修改库的数据,每当出现这种情况的时候,操作系统就复制出一份数据副本,然后修改进程的地址空间映射,使它指向新的数据副本,于是进程最后修改的只是属于自己的那份数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了