下标变量A[i,i,in]的地扯计算 公式 如果我们用a表示数组A的首地址 LOC(A[L,l2,,In]),用dk表示数组第k维的 下标界差,则上式可写成: LOC(A[ipi2...n)= a+∑6-,)几d.+n-,) k=+】 或 LOC(Aliniz)=-IId+)+d
下标变量A[i1 ,i2 ,…,in ]的地址计算 公式 • 如果我们用a表示数组A的首地址 LOC(A[l1 ,l2 ,…,ln ]),用dk表示数组第k维的 下标界差,则上式可写成: LOC(A[i1 ,i2 ,…,in ])= − = = + + − + − 1 1 1 ( ) ( ) n j n k j j j k n n a i l d i l 或 LOC(A[i1 ,i2 ,…,in ])= ( ) ( ) 1 1 1 1 1 1 − = = + − = = + − + + + n j n k j j k n n j n k j j k n a l d l i d i
地址计算公式的改写 若仅考虑静态数组,则ld均为常量,这时 前页中的等式右侧第一个括号内的值为一 常量,在编译时己可计算出。因此,公式 可改写为 LOC(A[i,i2,...,in])=CONSTPART+VARPART (5.21) 其中,CONSTPART=a-C,且 c-21,d+l. VARPART-i,IId.+i i= k=i+
地址计算公式的改写 若仅考虑静态数组,则l k , uk , dk均为常量,这时 前页中的等式右侧第一个括号内的值为一 常量,在编译时已可计算出。因此,公式 可改写为 LOC(A[i1 ,i2 ,…,in])=CONSTPART+VARPART (5.21) 其中,CONSTPART=a – C,且 − = = + = + 1 1 1 n j n k j j k n C l d l − = = + = + 1 1 1 n j n k j j k n VARPART i d i
数组的内情向量 ·为了按上述公式计算数组元素的地址,在编译程 序对数组说明进行语义处理时,须把数组的类型 ype、雅数n、各雅的业、下得lk、u,等有关信息记 录下来。 ·此外,如果数组是常界的,还可将各雅的器差d以 及上面公式中的常量C记录下来. 为了便于引用,通常是把上述信息存放于数组相 应的“肉情向量”之中.对数组内情向量的访问, 可通过数组在符号表中相应登记项的ADDR域以 间接寻址方式进行(即将其ADDR域作为指针用 于存放内情向量的首地址)
数组的内情向量 • 为了按上述公式计算数组元素的地址,在编译程 序对数组说明进行语义处理时,须把数组的类型 type、维数n、各维的上、下界lk、uk等有关信息记 录下来。 • 此外,如果数组是常界的,还可将各维的界差dk以 及上面公式中的常量C记录下来. • 为了便于引用,通常是把上述信息存放于数组相 应的“内情向量”之中.对数组内情向量的访问, 可通过数组在符号表中相应登记项的ADDR域以 间接寻址方式进行(即将其ADDR域作为指针用 于存放内情向量的首地址)