2017-11-25 236 views
0

原始問題是: 當執行程序在以下骨架程序中達到位置1時,顯示包含所有活動記錄實例(包括靜態鏈和動態鏈)的堆棧。假設Bigsub爲第1級實現子程序 - 活動記錄實例堆棧描述

enter image description here

答案是: enter image description here

但我想答案是錯的,因爲靜態鏈接應指向它的靜態父母的底部ARI,而不是頂端,只是動態鏈接應該指向頂端。

例如,B和C的靜態鏈接應該指向A的底部,而不是A的頂部,並且A的靜態鏈接應該指向BIGSUB的底部,不是嗎? 謝謝。

回答

0

激活記錄的佈局取決於實施。查看使用記錄的僞代碼應該讓你知道這個例子是否正確。這是一個創紀錄的頂部/底部依賴於實現(我將使用頂部你在下面做了,雖然它是底部給我)。

在這個例子中,指向記錄的另一端(「頂部」)是不必要的,因爲這些地址總是在STACK[DYNAMIC_LINK_ADDRESS]+1。 V 示例中的例程沒有定義參數或局部變量,這使得難以想象如何使用激活記錄。

如果每個例程定義了XY變量,那麼堆棧可能看起來像下面的僞表,動態和靜態鏈接都指向參數和變量可以在堆棧中使用正偏移量當變量爲本地或非本地時,使用相同的偏移量;對於A)的激活記錄,A.X+02

N-17: DL -> 12 
N-16: SL -> 07 
N-15: B.X 
N-14: B.Y 
N-13: RET C 
N-12: DL -> 07 
N-11: SL -> 07 
N-10: C.X 
N-09: C.Y 
N-08: RET A 
N-07: DL -> 02 
N-06: SL -> 02 
N-05: A.X 
N-04: A.Y 
N-03: RET BITSUB 
N-02: BIGSUB.X 
N-01: BIGSUB.Y