虚拟内存和可重定位代码

use*_*877 5 c linker operating-system loader virtual-memory

在32位系统中,每个进程实际上具有2 ^ 32个字节的CONTIGUOUS地址空间.那么为什么链接器生成的最终可执行代码需要可重定位.有什么要求,因为生成的所有地址都是进程自己的地址空间中的虚拟地址,而其他进程不能使用相同的地址空间.因此,该过程可以放在它想要的任何地方.为什么要重新定位?

小智 -1

它需要可重定位,因为为了执行您的进程,需要将其放入就绪队列中的实际主内存中。现在它在主存中的位置并不固定(它被放置在有足够空间可用的地方),因此指令的实际地址与其虚拟地址不同。

因此,调用函数、返回等的语句需要相应更新,指向这些函数的实际地址