【kernel】动态链接库.so在内存中的情况

无论在flash中还是在内存中都只有一份,当不同的进程调用到同一个.so中的内容时,内存中也只有一份.so

.so在第一个调用它的进程加载时,加载到内存中,但是它的代码段并不分布在进程的地址空间中,它只留下了一份内存映像在进程地址空间中的映射区

(映射区很神奇,进程地址空间中这段地址的页表都相同,也就是说指向了同一组物理页)

这里可以和共享内存联系起来说,共享内存也是可以被多个进程所共享,但是共享内存共享的是数据,而动态库共享的是代码段,每个进程还是要自己提供存储数据的区域

内存中的动态代码只有一份副本,但动态库的数据仍然可能有多份副本,因为每一个链接到动态的进程都可能会修改库的数据,每当出现这种情况的时候,操作系统就复制出一份数据副本,然后修改进程的地址空间映射,使它指向新的数据副本,于是进程最后修改的只是属于自己的那份数据

posted on   甲鱼写代码  阅读(259)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示