二維陣列逐行和逐列遍歷效率

2021-10-24 16:17:43 字數 687 閱讀 8038

首先陣列在記憶體中是按行儲存的,按行遍歷時可以從陣列首元素位址一直走下去,就可以遍歷完整個陣列,而按列遍歷則需要每次指向每一列的第n行元素;

但是指標定址很快,所以並不會有明顯的區別;

那麼到底按行遍歷比按列遍歷效率高在**呢?

1:cpu快取記憶體

cpu快取記憶體是用於減少處理器訪問記憶體所需平均時間的部件。在金字塔儲存體系中位於第二層,僅次於cpu暫存器;其容量遠小於記憶體,但是速度卻可以接近處理器的頻率。當處理器發出訪問請求時,會先檢視快取內是否有請求資料,如果存在(命中),則直接返回資料而不訪問記憶體,如果不存在,則要先把記憶體中的資料載入相應快取,在返回給處理器。

快取從記憶體中抓取一般都是整個資料塊,意味著抓取到的是物理記憶體連續的,基本上是同行不同列的,如果採用按列遍歷的話,將會使整個快取塊無法被利用,從而不得不從記憶體中重新讀取資料,從記憶體中讀取資料的速度遠遠小於從快取中讀取資料。

2:分頁排程

物理記憶體是以頁的方式進行劃分的,當乙個二維陣列很大,int arr[128][1024],假設一頁的記憶體未4096個位元組,那麼每一行正好佔據一頁。如果按列遍歷,就會發生128*1024次頁面排程,如果按行遍歷,只有128次頁面排程,頁面排程是有時間排程的,因此排程次數越多,遍歷時間就越長。

遍歷二維陣列

二維陣列的初始化和如何用foreach輸出,需要注意的是,tdarray.length是二維陣列的個數,tdarray.length i 是第i 1的陣列的長度 public static void main string args for int i 0 i 獲取二維陣列中的最大值max int ...

二維陣列及二維陣列的遍歷

一 如果陣列的元素是一維陣列 則該陣列是二維陣列 如果陣列的元素是二維陣列 則該陣列是三維陣列 注意 二維陣列的長度 是陣列內一維陣列的個數 獲取二維陣列內的元素 第一步獲取該元素在哪乙個一維陣列內 第二步獲取該元素在一維陣列的那個位置 false var arr 1,2,3 var arr1 你好...

陣列 二維陣列 遍歷 異常

建立物件的原則 先父類後子類 載入內容原則 先靜態後成員 this 當前new的物件 執行 找new的物件 方法 多型情況 呼叫重寫方法 屬性 就近原則 new 的步驟 值傳遞 基本資料型別是值傳遞 引用資料型別 位址值的傳遞 測試物件導向的使用 陣列 相同資料型別的資料的有序集合 變數 儲存單個資...