版权归原作者所有,如有侵权,请联系我们

[科普中国]-地址不可变

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

地址不可变是指在编译时,如果知道程序将驻留在内存的什么位置,那么,编译程序将产生绝对地址的目标代码。程序模块被装入内存以后,程序中的逻辑地址与实际内存地址完全相同,即地址不可变。地址不可变与程序装入方式有关,当程序采用绝对装入方式,程序在运行过程中,地址是不可变的。

简介在计算机系统,地址可以分为逻辑地址和物理地址。逻辑地址,在计算机体系结构中是指应用程序角度看到的内存单元(memory cell)、存储单元(storage element)、网络主机(network host)的地址,或由程序产生的与段相关的偏移地址部分。物理地址是指在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个的存储器地址。地址不可变在这里有两种解释,第一种解释可以是指单个程序语句之间的关系是固定的,不管系统采用哪种方式调用程序进入内存,但逻辑地址是不变的;第二种解释是指程序采用动态装入方式,这是逻辑地址和物理地址相同,即地址也是不可变。

绝对装入方式在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一件事,便是将程序和数据装入内存。如何将一个用户源程序变为一个可在内存中执行的程序,通常都要经过以下几个步骤:首先是要编译,由编译程序(Compiler)将用户源代码编译成若干个目标模块(Object Module);其次是链接,由链接程序(Linker)将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块(Load Module);最后是装入,由装入程序(Loader)将装入模块装入内存1。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。由于程序中的逻辑地址与实际地址完全相同,不需要对程序和数据的地址进行修改。程序中所使用的绝对地址,可在编译或汇编时给出, 也可由程序员直接赋予。 但在由程序员直接给出绝对地址时, 不仅要求程序员熟悉内存的使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。因此,通常是宁可在程序中采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。绝对地址的产生可以由程序员直接赋予。不仅要求程序员熟悉内存使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。通常在程序中采用符号地址,在编译或汇编时,再将符号地址转换为绝对地址。

编译计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,主要是因为有了编译技术。编译技术是计算机科学发展得非常迅速和成熟的一个分支他集中体现了计算机发展的成果与精华2。可以说如果没有高级语言,计算机的推广应用是难以实现的;而没有编译程序,高级语言就无法使用。编译(compilation , compile) 是利用编译程序从源语言编写的源程序产生目标程序的过程。 或用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。词法分析程序的主要任务:读源程序,产生单词符号和滤掉空格。逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学