乙個編寫良好的電腦程式常常具有良好的區域性性,它們傾向於引用最近引用過的資料項附近的資料項,或者最近引用過的資料項本身,這種傾向性,被稱為區域性性原理。有良好區域性性的程式比區域性性差的程式執行得更快。
時間區域性性示例
function sum(arry)
return sum
}
在這個例子中,變數sum在每次迴圈迭代中被引用一次,因此,對於sum來說,具有良好的時間區域性性
空間區域性性示例
具有良好空間區域性性的程式
// 二維陣列
function sum1(arry, rows, cols)
} return sum
}
空間區域性性差的程式
// 二維陣列
function sum2(arry, rows, cols)
} return sum
}
看一下上面的兩個空間區域性性示例,像示例中從每行開始按順序訪問陣列每個元素的方式,稱為具有步長為1的引用模式。
如果在陣列中,每隔k個元素進行訪問,就稱為步長為k的引用模式。
一般而言,隨著步長的增加,空間區域性性下降。
這兩個例子有什麼區別?區別在於第乙個示例是按行掃瞄陣列,每掃瞄完一行再去掃下一行;第二個示例是按列來掃瞄陣列,掃完一行中的乙個元素,馬上就去掃下一行中的同一列元素。
陣列在記憶體中是按照行順序來存放的,結果就是逐行掃瞄陣列的示例得到了步長為 1 引用模式,具有良好的空間區域性性;而另乙個示例步長為 rows,空間區域性性極差。
執行環境:
對乙個長度為9000的二維陣列(子陣列長度也為9000)進行10次空間區域性性測試,時間(毫秒)取平均值,結果如下:
所用示例為上述兩個空間區域性性示例
步長為 1
步長為 9000
1242316
從以上測試結果來看,步長為 1 的陣列執行時間比步長為 9000 的陣列快了乙個數量級。
程式效能優化 區域性性原理
概念 乙個編寫良好的電腦程式常常具有良好的區域性性,它們傾向於引用最近引用過的資料項附近的資料項,或者最近引用過的資料項本身,這種傾向性,被稱為區域性性原理。有良好區域性性的程式比區域性性差的程式執行得更快。區域性性通常有兩種不同的形式 時間區域性性 在乙個具有良好時間區域性性的程式中,被引用過一次...
程式區域性性原理感悟
區域性性原理 程式的區域性性原理是指程式在執行時呈現出區域性性規律,即在一段時間內,整個程式的執行僅限於程式中的某一部分。相應地,執行所訪問的儲存空間也侷限於某個記憶體區域。區域性性原理又表現為 時間區域性性和空間區域性性。時間區域性性是指如果程式中的某條指令一旦執行,則不久之後該指令可能再次被執行...
區域性性原理
區域性性原理 cpu訪問 儲存器時,無論是訪問指令還是訪問資料,所訪問的 儲存單元 都趨於聚集在乙個較小的連續區域中。三種不同型別的區域性性 時間區域性性 temporal locality 如果乙個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問。程式迴圈 堆疊等是產生時間區域性性的原因。順序區...