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

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

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

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

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

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

posted on 2022-10-25 10:49  甲鱼写代码  阅读(192)  评论(0编辑  收藏  举报

导航