2017-01-29 56 views
1

假設緩存行大小爲64字節,並且我有一個大小也是64字節的對象。如果該對象被訪問時,這將是:數據是否加載到與高速緩存行大小對齊的高速緩存中?

  1. 所有加載到一個高速緩存行
  2. 只有對象的開始和64個字節的倍數之間的部分將被加載
  3. 對象將被裝入兩個不同的高速緩存行
  4. 別的東西

我有一種感覺,答案從不同處理器到處理器,但什麼是現代CPU的最可能的結果?

回答

1

當涉及到機器指令級別時,高級語言中可用對象的概念消失。通過更高級別的分配操作訪問其成員將轉換爲常規讀寫指令。因此,如果運行時系統或該語言的虛擬機是智能的,並且能夠分配對象以獲得更好的緩存利用率,則在64位字節對齊的地址中,當高級語言讀取對象的任何成員時在64字節對齊地址內的任何地方,整個對象將被加載到高速緩存行(因爲它在64字節對齊地址處分配)。如果運行時系統是愚蠢的,如果它只是按照程序流程中的請求分配對象,而沒有查看問題中提到的情況(64字節對象和64字節高速緩存行),那麼當讀取發生在該對象,該成員的64字節對齊地址處的數據將被加載到緩存中。因此,在後一種情況下,您需要是幸運的,或者編寫代碼,以便在對象的前面或後面放置特殊的填充以使其緩存行對齊。