什么是可重定位程序和什么使程序可重定位?从OS内存管理上下文来看,为什么程序(进程)需要可重定位?什么是可重定位程序?
0
A
回答
0
有位置独立代码和位置相关代码。位置独立代码不取决于它在内存中的位置。位置独立代码通常是可取的。有许多技术处理器/编译器 - 汇编器/链接器/加载器组合用于生成与位置无关的代码。
如果你做这样的事情:
extern int b ;
int a = &b;
因为分配取决于其中B已经加载的代码本质上是与位置相关(但是,这种情况会发生如此普遍,即链接器和加载有办法处理这个)。
如果一个程序或共享库只包含与位置无关的代码,它可以加载到内存中的任何位置并且可重定位。
假设您有一个链接到共享库L1和L2的程序P.如果L1和L2需要在内存中使用相同的位置,则不能将它们装载在一起,否则P将无法运行。
0
大多数程序都可以重新定位。如果程序包含其数据的相对地址,那么它可以放在内存中的任何地方。它包含绝对地址,然后加载程序将在将程序加载到内存时调整代码中的这些地址。 http://linker.iecc.com/
相关问题
- 1. 什么是可重入程序?
- 2. 重新定位的含义是什么?
- 3. 为什么程序与-fpic和-pie编译有重定位表?
- 4. 什么是可写位图?
- 5. 什么是确定应用程序位置的正确方法?
- 6. 什么是定位点?
- 7. 这可能是什么? [程序错误]
- 8. 符号是绝对的还是可重定位的,意味着什么?
- 9. .bss中的ELF重定位是什么,但相对于.bss,是什么意思?
- 10. 什么是给定的程序
- 11. 什么是非确定性程序?
- 12. 程序需要重启的程序是什么?
- 13. 为什么定位divs重叠?
- 14. 为什么要在可执行文件中重定位(.reloc节)?
- 15. 是否可以重新定位pythonbrew
- 16. 为什么是不是可以使用CNAME重定向与HTTPS
- 17. C#程序集,什么是程序集?
- 18. 为什么一些Windows应用程序包含重定位目录?
- 19. 什么程序集是XslTransformException?
- 20. 什么是协同程序?
- 21. 什么是DynamicProxyGenAssembly2程序集?
- 22. erxkab1r2c2ibqtnnxtpzrumqv3gqlpl是什么程序集?
- 23. 什么程序集是System.Ext?
- 24. 什么是“上游”程序?
- 25. 什么是程序集?
- 26. 什么是主程序集
- 27. 流星:重定向后的最终位置/网址是什么?
- 28. Emacs中缓冲区的重定位分配器是什么?
- 29. R_X86_64_32S和R_X86_64_64重定位是什么意思?
- 30. 在程序集中的重新定位
你的解释不错:)。但是,您的解释是所有程序都可以重新定位的一种方式?你是什么意思 – Mikeez
是的。所有正常的程序都可以重新定位。然而,在许多情况下,程序并未重新定位,但操作系统正在使用虚拟地址转换将程序放置在所需的虚拟地址处,即使物理地址位于其他地方。如果同一个进程有多个程序,DLL或共享对象,则它们必须重新定位,因为它们也必须具有不同的虚拟地址。 –
谢谢雾:) – Mikeez