存储管理中,地址静态重定位的时机是
时间: 2024-03-29 18:38:41 浏览: 16
地址静态重定位是指程序被加载到内存中时,程序的绝对地址已经确定,不需要在运行时进行地址的修改。因此,地址静态重定位的时机是程序被加载到内存中的时候。
在程序被编译成目标代码后,需要进行链接操作将不同的目标文件组合成一个可执行文件。链接器会将目标文件中的相对地址转换为绝对地址,并将程序的入口地址等信息写入可执行文件的头部。在程序被加载到内存中时,操作系统会将可执行文件的头部信息读取到内存中,并根据头部信息将程序加载到指定的内存地址。此时,程序的绝对地址已经确定,不需要再进行地址的修改,因此地址静态重定位也就完成了。
相关问题
静态重定位和动态重定位
静态重定位和动态重定位是两种不同的重定位方式。
静态重定位是指在程序被链接时,将程序中所有的符号引用都解析成实际的内存地址,生成一个完全可执行的程序。在静态重定位的方式下,程序在执行时不需要进行额外的重定位,因为所有的地址都已经被解析成实际的内存地址了。静态重定位的好处是程序执行时速度较快,因为不需要进行额外的重定位操作,坏处是程序文件较大,因为所有的符号引用都已经被解析成实际的内存地址。
动态重定位是指在程序运行时,当程序需要访问某个符号时,才将该符号引用解析成实际的内存地址。在动态重定位的方式下,程序文件较小,因为不需要将所有的符号引用都解析成实际的内存地址,但是程序执行时速度较慢,因为每次访问符号时都需要进行额外的重定位操作。
动态重定位的好处是程序的可移植性较好,因为程序不依赖于具体的内存地址,可以在不同的内存地址空间中运行。动态重定位也可以实现共享库的功能,多个程序可以共享同一个库文件,减少内存占用。
动态重定位和静态重定位的区别
动态重定位和静态重定位是两种程序加载时地址调整的不同方式,它们主要用于解决操作系统中共享库(DLL、.so 文件)的链接问题。
1. 静态重定位(Static Relocation):
- 这是在编译时完成的。程序员在编写代码时,函数地址和其他全局变量的地址都是相对于源文件的绝对位置。当程序被静态链接到目标位置(如可执行文件)时,编译器会计算这些地址的偏移,并将其写入最终的二进制文件中。
- 缺点是每次程序运行时都需要重新对齐,这可能消耗额外的内存,并且在多进程环境下可能导致数据冲突。
2. 动态重定位(Dynamic Relocation):
- 在程序运行时进行。在动态加载库或使用共享库时,操作系统或运行时环境(如Dlopen/Dlsym等)会在程序运行时根据实际地址(通常是内存地址)对函数指针和其他需要重定位的地址进行调整,确保它们指向正确的库函数或数据。
- 优点是可以节省内存,因为多个进程可以共享同一份库,只需要为每个进程分配一次重定位所需的额外信息。此外,动态加载也可以提供更好的灵活性,模块化应用程序,方便扩展和升级。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)