据我所知,与位置无关的代码可以节省磁盘空间,因为它不会在编译时加载库,并且可以降低启动成本,因为它只在需要运行时加载lib代码。因此,由于每个使用相同lib函数的进程都会将其加载到地址空间中,这种方法如何节省内存?
答案 0 :(得分:0)
让我们说我有一个共享库,其格式适用于我正在使用的任何系统。该共享库与位置无关。
通过PIC,它可以映射到虚拟地址空间的任何地方。
如果我有10个进程同时使用该共享库,则物理内存中可以有一个副本,其中多个虚拟地址映射到相同的物理地址。
如果代码不是PIC,则需要加载程序在运行时对库进行修复。这些修补程序不能跨进程共享,需要在内存中多次复制代码。