【kernel】动态链接库.so在内存中的情况
无论在flash中还是在内存中都只有一份,当不同的进程调用到同一个.so中的内容时,内存中也只有一份.so
.so在第一个调用它的进程加载时,加载到内存中,但是它的代码段并不分布在进程的地址空间中,它只留下了一份内存映像在进程地址空间中的映射区
(映射区很神奇,进程地址空间中这段地址的页表都相同,也就是说指向了同一组物理页)
这里可以和共享内存联系起来说,共享内存也是可以被多个进程所共享,但是共享内存共享的是数据,而动态库共享的是代码段,每个进程还是要自己提供存储数据的区域
内存中的动态代码只有一份副本,但动态库的数据仍然可能有多份副本,因为每一个链接到动态的进程都可能会修改库的数据,每当出现这种情况的时候,操作系统就复制出一份数据副本,然后修改进程的地址空间映射,使它指向新的数据副本,于是进程最后修改的只是属于自己的那份数据