⑵ 动态存储区 根据变量的局部定义和分程序结构,编译程序设置动态存储区来适应这些局部变量的生存和消亡。局部动态变量的生存期是定义该变量的局部范围,即在该定义范围之外此变量已经没存在的必要。及时撤销时这些单元的分配可以回收,从而提高程序运行时的空间效率。 对变量存储分配的属性除了存储类别之外还要确定其在所在存储区的具体位置的属性信息。通常在符号表中存放具体位置的信息是按该变量的存储区类分别依出现先后的次序(扫描源程序的次序)排列下相对该存储区表头的相对位移量来表示的。 例如对于外部量(C语言为例) … int a; // 外部定义的整型变量a … float b; // 外部定义的实型变量b … struct cc{ int d; // 外部定义的结构类型cc, cc的第一个结构分量d float e; // cc的第二个结构分量t … }c; // 外部定义的结构型变量c … 其中a,b,c是三个外部量,d,e是结构分量,则在符号表中,这5个变量项有关存储位置的属性信息将如图9.1。这儿cc是一个结构标记,作为标识符它要登入到符号表中,但它只是一个类型标识符,因此没有地址分配的问题。
至于d和e是cc的结构分量,其位置属性由结构c来决定,因此d,e的相对位移量分别是0,4。 对于局部量来说,上面的原则是相同的,所不同的仅是相对不同的区头。 |