2017-04-11 29 views

回答

0

位置独立代码位置相关代码。位置独立代码不取决于它在内存中的位置。位置独立代码通常是可取的。有许多技术处理器/编译器 - 汇编器/链接器/加载器组合用于生成与位置无关的代码。

如果你做这样的事情:

extern int b ; 
int a = &b; 

因为分配取决于其中B已经加载的代码本质上是与位置相关(但是,这种情况会发生如此普遍,即链接器和加载有办法处理这个)。

如果一个程序或共享库只包含与位置无关的代码,它可以加载到内存中的任何位置并且可重定位。

假设您有一个链接到共享库L1和L2的程序P.如果L1和L2需要在内存中使用相同的位置,则不能将它们装载在一起,否则P将无法运行。

0

大多数程序都可以重新定位。如果程序包含其数据的相对地址,那么它可以放在内存中的任何地方。它包含绝对地址,然后加载程序将在将程序加载到内存时调整代码中的这些地址。 http://linker.iecc.com/

+0

你的解释不错:)。但是,您的解释是所有程序都可以重新定位的一种方式?你是什​​么意思 – Mikeez

+0

是的。所有正常的程序都可以重新定位。然而,在许多情况下,程序并未重新定位,但操作系统正在使用虚拟地址转换将程序放置在所需的虚拟地址处,即使物理地址位于其他地方。如果同一个进程有多个程序,DLL或共享对象,则它们必须重新定位,因为它们也必须具有不同的虚拟地址。 –

+0

谢谢雾:) – Mikeez