2012-03-19 20 views
1

任何人都可以請讓我知道如何用C deterimine在處理器的地址線的數量RAM字的大小多少?這不能等於處理器寄存器的大小,因爲與寄存器的大小相比,地址線的數量可能不同(例如,在8086中,地址線是20,而寄存器的大小是16)。確定的地址線和用C

同樣,我們可以找到通過一個C程序的RAM字的大小(意思是每個尋址單元的大小)?

+0

「字大小」,你的意思是DDR突發的大小? – 2012-03-19 18:42:19

+0

什麼是ddr爆發,我不知道。按字的大小我的意思是一個存儲位置是唯一可尋址的。 – mezda 2012-03-19 18:50:12

+0

我試圖理解你實際要求的是什麼。具體而言,您指的是「唯一可尋址的一個存儲位置」。就CPU而言,內存在字節(char)級別是唯一可尋址的。 – 2012-03-19 18:51:41

回答

3

簡短的回答幾乎所有的這些是(至少在真的由C本身定義的可移植的方式),你不能。

地址線,例如,是一個特別艱難的一個。舉例來說,相當多的DSP有兩個甚至三個完全獨立的地址空間連接到相同數量的物理內存通道 - 每個都可能具有唯一的大小。除此之外,即使處理器上有N條地址線,可能(通常也會)會比實際連接的內存少。

也就是說,sizeof(void *) * CHAR_BIT通常會給出地址線數量的至少一個合理的近似值 - 至少理論上由架構允許的數量,雖然可尋址內存的數量可能會有所不同。

的標準說int被認爲是該「由處理器建議自然大小」。通常情況下(但絕對不總是),這與處理器整數寄存器的大小相同。

+0

感謝您的回覆,我對此有更多疑問。在C中,每個字節可單獨尋址。但是,如果我們將RAM的字大小設爲指定的int大小(例如,如果大小爲2或4,則字大小),那麼這意味着每個字(2或4字節)都是可單獨尋址的,而不是每個字字節。你能否澄清一下,我在理解這一點時出現錯誤。謝謝 – mezda 2012-03-19 18:41:13

+0

@ user1182722:真的沒有答案。據C,你必須要能夠解決個人'char's,但不管是直接由硬件支持是值得商榷的 - 這是目前大多數的機器,但肯定並非總是(例如,Crays早僅在64位字尋址的存儲器 - 一個'的char *'具有在頂部位的存儲器地址,而在底部比特字內的偏移量)。 – 2012-03-19 18:44:42

+0

感謝您的回覆,但我無法準確理解這一點。是否有可能找到一些時間來解釋這一點。這將是一個很大的幫助。非常感謝。 – mezda 2012-03-19 18:48:52

0

據我知道答案,這兩個問題是實現定義。在C語言中沒有這些東西的標準化概念,因此沒有標準的代碼來編寫測試。您可能會猜到它們,但這並不能讓您的代碼具有可移植性。一個特定的編譯器套件可能會提供這些工具,但是這又不會讓您的代碼變得可移植。