2012-03-05 33 views
0

如果你不讀值,但分配值的數組初始化操作緩存以及

例如

int array[] = new int[5]; 

for(int i =0; i < array.length(); i++){ 
array[i] = 2; 
} 

仍對陣列來緩存? cpu不能將數組元素逐一帶入其寄存器並進行賦值,然後再將更新後的值寫入主內存,通過調整高速緩存,因爲在這種情況下它不是必需的?

回答

1

答案取決於我回答的緩存協議,假設回寫寫分配。

該陣列仍然會來緩存,它會有所作爲。當一個緩存塊從它不僅僅是一個內存位置被檢索時(實際大小取決於緩存的設計)。因此,由於數組按順序存儲在內存中,數組[0]將拉動將包括(至少一些)數組[1]數組[2]數組[3]和數組[4]的塊的其餘部分。這意味着以下調用將不必訪問主內存。

此外,在完成這些操作之後,這些值將不會立即寫入內存(在回寫下),而是CPU將繼續使用高速緩存作爲讀/寫的內存,直到該高速緩存塊從高速緩存點的值將被寫入主內存。

總體而言,每次都要記憶,因爲緩存速度要快得多,而且用戶很可能會使用剛剛設置的內存。

如果協議是Write Through No Allocate,那麼它將不會將該塊帶入內存,並且會直接進入主內存。