什麼是區域性性原理?
區域性性原理是指計算機程式在特定時間段內傾向於訪問同一組記憶體位置的現象。程式中的迴圈和子程式呼叫主要體現了局部性原理。
從抽象層面來看,區域性性原理主要分為以下兩種:
時間區域性性
空間區域性性
時間區域性性
這種型別的最佳化包括將頻繁訪問的記憶體引用短期地放到臨近的記憶體位置,以便將來訪問更快。
例如,如果在一個指令集中聲明瞭一個被非常頻繁訪問的變數,我們將該變數放入記憶體層次結構中最接近的記憶體暫存器中,以實現更快訪問。
空間區域性性
這種型別的最佳化假設,如果訪問了一個記憶體位置,則很可能也會訪問附近/連續的記憶體位置,因此我們將附近的記憶體引用也放到臨近的記憶體位置,以實現更快訪問。
例如,在任何指令集中遍歷一維陣列都將受益於這種最佳化。
利用這些最佳化,我們可以極大地提高程式效率,並且可以在硬體級別或軟體級別實現。
讓我們看看區域性性原理與快取記憶體和命中率的關係。
與快取記憶體的關係
快取是一個專門設計的、速度更快但容量更小的記憶體區域,通常用於儲存最近訪問的資料和最近訪問資料附近的資料,這可能導致效能提升。
快取中的資料不一定對應於主存中空間上接近的資料。但是,資料元素一次一個快取行地被放入快取。這意味著空間區域性性仍然很重要。如果引用了一個元素,一些相鄰元素也將被放入快取。
最後,時間區域性性在最低級別起作用,因為非常接近地一起引用的結果可以儲存在機器暫存器中。像C這樣的程式語言允許程式設計師建議將某些變數儲存在暫存器中。
與命中率的關係
命中率是為記憶體層次結構的任意兩個相鄰級別定義的概念。它是找到我們正在查詢的記憶體中的資訊項的機率。
因此,區域性性原理需要良好的命中率才能實現快速訪問時間。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP