計算機已知乙個位址,得到這個位址指向的內容,時間是常數級的嗎?如何實現的?

時間 2021-06-03 08:26:38

1樓:

對NUMA(Non-uniform memory access)系統來說,access to local memory 要快一些,祥見:

Non-uniform memory access

其他的參見@vczh 回答。

2樓:Howard Curry

記憶體位址的查詢其實就是乙個二進位制解碼器。考慮閘電路的延遲,其實應該是O(lg n)的。不過反正你的記憶體位址不超過64/128位,可以看作常數。

補充:一級cache是全相連的,線性時間查詢。所以都非常小。

3樓:

首先有 Cache 的問題,如果 miss 那麼就通過位址線和資料線去讀,簡單的理解 DRAM 是乙個靠行列資訊選擇資料位址、靠讀寫控制訊號來選擇行為(讀/寫)的矩陣,所以由於CPU頻率和記憶體頻率高,這個時間很短;它是由硬體決定的,可以看成常數;當然這是相對的,對於 SRAM 它已經很慢了。而且演算法的時間複雜度你總要有個輸入的量級,記憶體每次獲取的資料大小本身就是有限的,也不可能不是常數級啊,L123 和暫存器也是常數級呢。。

4樓:Atela

從虛擬位址通過TLB或者多級頁表算出實體地址, 然後通過cpu內的記憶體控制器發出讀取訊號,並把位址放到位址匯流排上(還涉及多通道,numa),然後根據物理記憶體的編址方式傳送片選訊號到特定的記憶體條,選擇特定的rank(乙個rank提供了資料匯流排的位寬的資料,不同通道的不同rank可以被並行載入)。

5樓:farter yang

如果你要強行從漸進角度分析的話。

假設流程是這樣:從暫存器裡有乙個數值,根據這個位址找記憶體要數值,需要通過暫存器的多路選擇器送上位址匯流排,到記憶體的解碼器再拿到資料丟上資料匯流排,再通過解碼選擇目標暫存器,鎖存到暫存器裡。

暫存器和記憶體都需要定址。按課本上教的那種解碼器和多路選擇器實現,如果有n個暫存器,m大小的記憶體,這個過程電路需要的時間複雜度是O(log(log(n))+log(log(m)))。

有不對請指教。

6樓:班傑明

計算機指向的位址通常是記憶體,讀寫記憶體都需要時間,DDR3 1600的記憶體每秒可以讀1600M次,那你算一下就知道讀一次記憶體需要多少時間了。

計算機為什麼要設定線性位址,從邏輯位址到線性位址再到實體地址?

Sinaean Dean 首先,並不是所有的CPU都有邏輯位址。邏輯位址是段式記憶體管理單元的輸入的,有些CPU的,比如說典型的ARM是沒有段式記憶體管理單元的。所以linux為了相容所有CPU,只使用了頁式記憶體管理單元,對段式記憶體管理單元只是敷衍了一下,讓它的所有輸入與輸出相等。然後,GDT,...

計算機中的堆位址從低到高向上增長,但棧位址卻從高到低向下增長,為什麼這樣設計,這樣設計有什麼好處?

我的理解是,入棧從高位址向低位址增長,這是資料的儲存階段 出棧是從地位址向高位址進行的,這是資料的讀取階段。從資料訪問這個層次來看,堆和棧都是從低位址開始的,沒什麼不同,也比較符合常理。 浮生 正好看到Cortex M3的相關文件,在Cortex M3中,堆和棧就是這麼設計的。這樣設計的目的是當棧不...

計算機中乙個程序的邏輯位址為什麼往往比實體地址要多?

英雄不問出處 有mmu這個東西,可以分配虛擬位址 題中邏輯位址,下同 再加上核心的支援,可以提公升物理記憶體的利用率。講一下Linux Kernel的處理,當執行乙個程式時,核心並不會把整個程式完全載入到物理記憶體中,而是分配好虛擬位址,載入可執行檔案的部分到物理記憶體,只分配了虛擬位址而程式未載入...