共享库的一个主要目的就是允许多个正在运行的进程共享内存中相同的库代码,从而节约内存
那么,多个进程是如何共享程序的一个副本的呢?
- 一种方法是给每个共享库分配一个事先预备的专用的地址空间片,然后要求加载器总是在这个地址加载共享库,也就是说,在这种方法下,每个共享库都像停车一样,停在车位上,每个进程都来车位上找车
- 但是它也造成了一些严重的问题,如果没有任何进程要来找这个车,这个车位也依然被占用了,它对地址空间的使用效率不高,因为即使一个进程不使用这个库,那部分空间还是会被分配出来
- 它也难以管理。我们必须保证没有片会重叠。每次当一个库修改了之后,我们必须确认已分配给它的片还适合它的大小
- 如果不适合了,必须找一个新的片。并且,如果创建了一个新的库,我们还必须为它寻找空间
为了解决这些问题,现代操作系通过位置无关代码来做到可以加载而无需重定位