0

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

4

2 回答 2

1

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

于 2009-07-28T06:08:37.237 回答
1

处理器中有MMU(Memory Manegememt Unit)。它为每个进程/程序提供了自己有限的内存空间。这就是当今程序中的缓冲区溢出不会造成太大破坏的原因。这样,每个程序都存在于自己的内存中。操作系统处理这个。

编辑:

程序通常从仅红色的位置(ROM/磁盘/闪存)运行,它们需要堆栈来存储临时值。对于 c/c++ 中的实例,几乎所有的但特殊的值定义为 char/int/long/float 和数组当然会在堆栈上。这意味着链接器仅使用并期望堆栈或程序本身中的数据(通常是只读的)

当程序需要在编译时无法定义的额外内存大小时,它需要堆。使用 malloc 或 new (c/c++) 分配堆

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

于 2009-07-28T06:20:13.907 回答