‘壹’ 高级语言源程序编译后产生的地址是逻辑地址还是物理地址
由于操作系统技术的发展,可重用二进制程序技术使用了内存重定位技术,所以从汇编的角度来看即不是逻辑地址也不是物理地址。而且这个概念有些不同,编译后产生的地址是相对地址,是相对于可执行头部位置的地址。而逻辑地址是指在指令系统内部使用的用来访问内存的一个逻辑表示,通常表现为相对于某个段基地址的偏移量。
当可执行程序被载入内存之后,才会有逻辑地址存在,此时可执行程序被如何加载于何处,地址为多少,由操作系统决定,此时cpu访问程序用的是逻辑地址。一个程序一旦被编译确定之后基本上变量初始化的顺序固定,资源分配位置也固定,设置有编译器使用预分配机制,然后采用相对地址引用。
注意:某些工具书也称二进制可执行文件内所有的相对地址范围是逻辑地址空间,相对地址就是逻辑地址。因为两者的访问方式相似,逻辑地址变换依赖cpu或者附加变换机构(硬件),而二进制程序地址空间变换需要操作系统插手管理。
反汇编分析中常常将二进制内部地址称为逻辑地址,因为反汇编器不能还原原来汇编代码的地址跳转空间特性,因此得到一个相对于二进制数据起点位置的相对地址,而和内存和物理存储都没有关系。
‘贰’ 用户编写的程序时一般采用什么地址
逻辑地址。
因为逻辑地址会直接显示应用程序的内存单元,就是可以直接看到存储的位置,所以用户在编写程序的时候会直接采用逻辑地址进行编写。
逻辑地址往往不同于物理地址,通过地址翻译器或映射函数可以把逻辑地址转化为物理地址。
‘叁’ 操作系统中 区分编译后的形成逻辑地址和链接后的形成的最终逻辑地址 什么意思啊
编译后产生若干个目标模块,编译后的逻辑地址指的是每个模块都从0号单元开始编址,而链接将这些模块链接在一起,形成一个完整的装入模块,此时的逻辑地址会重新编址,也就是说链接后的逻辑地址是将整个模块从0号单元开始编址。