2009-07-28 31 views
0

地址空间重定位和链接器完成的重定位任务之间有什么区别据我所知,链接器完成的重定位任务包括将符号引用连接到符号定义的过程。地址空间当可执行文件被带入内存并且所有的地址引用都参考它被放置在内存中的地址的起始地址被解析时,重定位是关心的,而且我也想知道谁这个地址空间搬迁吗?重定位任务

回答

1

处理器中有MMU(内存管理单元)。它为每个进程/程序提供了有限的内存空间。这就是现在程序中缓冲区溢出不能造成太大损害的原因。这样每个程序都在自己的记忆中。 OS处理这个。

编辑:

程序generaly从红色唯一位置(ROM /硬盘/闪存)上运行,他们需要堆栈临时值。对于c/C++中的情况来说,几乎可以实现,但是特殊的值被定义为char/int/long/float和数组。 这意味着链接器仅使用堆栈或程序本身中的数据(这只是一般性的只读)

当程序需要额外内存的大小无法在编译时定义它需要堆。堆被分配为白色malloc或新的(c/C++)

但是,因为从RAM读取通常比从其他类型的内存存储设备快,操作系统从RAM上的磁盘复制程序,并从那里开始执行程序。

+0

@ralu请你详细说明地址空间的重定位和由链接器完成的重定位之间的差异。??谢谢你的回答 – wantobegeek 2009-07-28 08:40:36

1

是的,你说得对。操作系统中的进程加载器执行加载时重定位。它实际上充当运行时链接器。