2012-11-19 47 views
4

這不是一個家庭作業問題。它今天在我的學期考試中出現了。代碼片段的頁面錯誤

此代碼段計算每個表式柱的平均t[i][j] 0<=i<18 ; 0<=j<1024

for (j = 0; j < 1024; i++) { 
    temp = 0; 
    for (i = 0; i < 18; i++) { 
     temp += temp + t[i][j]; 
    } 
    cout << temp/18; 
} 

變量都是32位的浮點值。

變量ijtemp被存儲在處理器寄存器(因此沒有必要的存儲器參考訪問臨時。主存儲器是字尋址和分頁的含17幀,每幀大小爲1024個字和一個字爲4個字節。頁替換策略是LRU

確定的頁面錯誤數執行給定的程序片段答:?18432

如何計算它

+1

1024 * 18 = 18432 –

+0

@DavidTitarenco,你認爲通過索引對數組的每次訪問都會產生頁面錯誤嗎? – 2012-11-19 15:33:24

+1

@aleguna內部循環遍佈數組的外部索引,意味着每個訪問間隔1024個字。由於每個幀都是1024個字,所以我們有它。 –

回答

5
012?

此數組中存儲的佈局是[0, 1, 2, 3, 4, 5, 6, 7, 8]

array[0][0] 
array[0][1] 
array[0][2] 
array[1][0] 
array[1][1] 
array[1][2] 
array[2][0] 
array[2][1] 
array[2][2] 

這裏array[1][0]array[2][0]之間的存儲器地址差爲3;

因此給出一個數組a[18][1024]a[i][j]a[i+1][j]之間的差異是1024字節(頁面錯誤的大小)。所以,每當你的內部循環觸發導致頁面錯誤。你的內部循環觸發18 * 1024次(18432)。

+0

現在非常感謝 – nightrider