題 計算機中的內容決定了內存地址佔用的內存量?


在我的筆記中,我發現了來自未知來源的以下引用:

一個 字節尋址 32位計算機可以處理2 ^ 32 = 4,294,967,296字節的內存,或4個千兆字節(GiB)。

具有32位地址總線的系統可以處理2 ^ 32(4,294,967,296)個存儲器位置。 如果每個存儲器地址保持一個字節,可尋址存儲空間為4 GB。

在計算機中用什麼來確定存儲器地址佔用多少內存,即計算機是字節可尋址,字可尋址還是xxxx可尋址?是RAM本身,CPU還是別的什麼?

注意:我的問題與編程無關。我認為它與編程角度不同,其中對象的地址所佔的內存量取決於其數據類型(int,float,...)。

謝謝!


4
2017-12-25 03:34


起源


@Ramhound:你的意思是“xxx-addressable”是由CPU指令集決定的? - Ben
請注意“單詞”的概念是 也 體系結構相關。也就是說,這確實帶來了不少記憶(沒有雙關語)...... - a CVn


答案:


在不進入技術細節(無論如何我會出錯)的情況下,計算機硬件本身的設計和構建使得每個地址指的是一個字節,或2個字節,或4個字節,或者其他什麼。操作系統別無選擇;必須編寫它以符合硬件設計。

今天運行的大多數(可能是所有)計算機都是字節可尋址的,一個字節是8位。過去的設計有所不同。

地址中的位數決定了地址的數量。存儲在地址中的位數由設計指定;將有一個引腳和一條線來傳輸數據。將這些數字相乘以獲得可存儲的最大位數。

回答你的實際問題:它是RAM本身 - 是的,CPU - 是的,還是別的 - 是的,主板和芯片組。所有這些都必須設計為協同工作,它們都必須就字節大小和尋址達成一致。


8
2017-12-25 04:35



抱歉,但您的最後一段不正確。在當前的商用PC中,RAM和內存控制器不支持尋址到比8字節--64位更精細的粒度。您知道如何將RAM模塊的容量廣告為例如128Mx64? “64”是以位為單位的每個可尋址RAM塊的大小,因此這將是1 GB模塊。字節可尋址性由CPU的固件和緩存處理。 - Jamie Hanrahan
@Jamie Hanrahan:我沒跟著你。這有什麼不對嗎? - user184411
發送到DIMM的地址均指向64位寬的內存塊。換句話說,DIMM可以 不 實現每個字節的地址。在我給出的128Mx64 DIMM示例中,將實現128x1024x1024不同的地址。但是在CPU中,指令集為每個字節實現一個單獨的地址。對於相同DIMM具有1 GiB內存且每個1024x1024x1024字節的CPU都有自己的地址。因此CPU和RAM都可以 不 同意可尋址存儲單元的寬度。 - Jamie Hanrahan


在過去,處理器有引腳,其中一些用於與內存通信。

您有A引腳,用於指定地址,D引腳用於讀取或寫入數據。 80年代早期的典型8位處理器將具有引腳D0至D7和A0至A15。這意味著它可以處理最多2 ^ 16個8位(D0到D7)字節的內存,或64K。 16位CPU將有16條D線( m68k的 是一個例子)和32位CPU(如 奔騰)會有三十二個。

可能有一個帶有8位外部總線的16位架構,或帶有16位外部總線的32位架構 - 有多種因素可以決定CPU的“位”性,數據寬度是只是其中之一。內部架構可能仍然不同。

看著 引出線 (雖然CPU不再有“引腳”,但是主板上有引腳,CPU現在已經有了“陸地”),這些內容最近就像Core i7一樣 - 事情發生了變化。我不確定像DDR0_DQ [63]這樣的東西是什麼意思 - 由於緩存,NUMA和多核CPU,今天CPU和內存之間的關係很複雜。

所以它是CPU架構和它使用的物理內存接口的組合決定了這一點。


6
2017-12-25 04:06



我的問題不是地址的位,而是地址尋址的內存量。 - Ben
@T ...這確實提到了cpu正在尋址的內存量。例如他提到用於指定地址的引腳和用於r / w數據的引腳,這些不是存儲器中地址的位。至於地址尋址,我覺得你很困惑。 CPU寄存器也許可以在CPU中被稱為地址,但實際上並沒有被稱為。內存地址 - 內存中的地址,並不真正解決內存(在編程語言之外,比如C中的指針,但你的意思是在編程之外)。 - barlop
好東西超,但我想一個問題是..假設一個系統一次讀/寫4個字節。現在,如果CPU想要尋址字節0-3,那麼確定它的MAR /存儲器地址寄存器設置為0,是嗎?現在,如果它想要解決字節4,我想它會取出字節4-7但是什麼地址進入存儲器地址寄存器? 2?還是4?或其他一些數字 - 什麼? - barlop 6分鐘前 - barlop
“在過去,處理器有針腳”  - 在微處理器,處理器和CPU由一個或多個板而不是一個芯片組成之前。 - sawdust


什麼是在計算機中確定內存地址佔用多少內存?

良好的入門級問題。

我想說簡單的答案是成本和復雜性之間的權衡。

例如,有一台計算機,通過將位移位然後將它們組合在一起,一次只尋址一位((很久以前就認可)。它們將佈線保持在最低限度。並且有4位寬的數據字計算機沒有那麼遠。我輸入的計算機一次得到一個64位寬的字。但請注意,32位機器通過獲取兩個32位寬的字並將它們組合在一起來做同樣的事情。我還記得舊的IBM大型機,它有大約10種不同的方式來處理單詞。但大部分都是在固件中完成的程序的便利,因為它實際上只處理一個大小的物理內存字(以保持硬件簡單)。

所以答案是有很多方法可以做事情和很多方法來設計事物,以及幾乎所有組合。成本和速度是做出決策的地方。


1
2017-12-25 08:24



“計算機......一次得到一個64位寬的字”  - 與實際問題無關。好像您將內存訪問/傳輸大小與內存地址處的內存單元大小混淆。您的PC具有每個內存字節的地址。訪問64位字後,下一個字的地址為 +8 以前的地址。上 16位小型機 我以前編程,內存讀取總是取16位,地址+ 1取下一個16位。 CPU不支持獲取半字或僅8位或一個字節。 - sawdust
請關注原始問題,“......計算機中的內容是什麼,以確定內存地址佔用多少內存,[例如],計算機是字節可尋址,字可尋址還是xxxx可尋址?“ - Eliptical View
這並沒有直接回答這個問題,“[那部分是做什麼的?]”(轉述);但它確實提供了一些很好的背景信息。謝謝! - jpaugh