什么是可重定位程序?

时间:2017-04-11 19:00:54

标签: operating-system computer-science relocation

什么是可重定位程序以及程序可重定位的原因是什么?从OS内存管理上下文,为什么程序(进程)需要可重定位?

2 个答案:

答案 0 :(得分:2)

位置无关代码位置相关代码。位置无关代码不依赖于它在内存中的位置。通常需要位置无关代码。处理器/编译器 - 汇编器/链接器/加载器组合使用很多技术来生成与位置无关的代码。

如果您执行以下操作:

extern int b ;
int a = &b;

代码本质上不是位置独立的,因为赋值取决于b的加载位置(但是,这种情况很常见,链接器和加载器有办法解决这个问题。)

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

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

答案 1 :(得分:1)

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