什么是可重定位程序以及程序可重定位的原因是什么?从OS内存管理上下文,为什么程序(进程)需要可重定位?
答案 0 :(得分:2)
位置无关代码和位置相关代码。位置无关代码不依赖于它在内存中的位置。通常需要位置无关代码。处理器/编译器 - 汇编器/链接器/加载器组合使用很多技术来生成与位置无关的代码。
如果您执行以下操作:
extern int b ;
int a = &b;
代码本质上不是位置独立的,因为赋值取决于b的加载位置(但是,这种情况很常见,链接器和加载器有办法解决这个问题。)
如果程序或共享库只包含与位置无关的代码,则可以将其加载到内存中的任何位置,并且可以重定位。
假设您有一个程序P链接到共享库L1和L2。如果L1和L2要求在内存中使用相同的位置,则它们不能一起加载而P不能运行。
答案 1 :(得分:1)
大多数程序都可以重新定位。如果程序包含其数据的相对地址,那么它可以放在内存中的任何位置。它包含绝对地址,然后加载程序将程序加载到内存时调整代码中的这些地址。 http://linker.iecc.com/