官术网_书友最值得收藏!

4.1 內存

計算機需要一個地方來保存它們正在操作的位。我們在第3章中介紹過,那個地方就是內存?,F在來看計算機使用內存的原理。

內存就像是一條建滿了房屋的長街。每間房子大小完全一樣,都有容納一定數量位的空間。編譯代碼基本上都是按每間房子1個字節計算的。就像在真正的街上一樣,每個房子都有一個地址,每個內存都有對應的數字。如果計算機內存為64 MiB,則包含64×1 024×1 024=67 108 864字節(或536 870 912位)。字節的地址為0到67 108 863。與建筑物門牌號不同,字節的地址有實際的用處。

引用內存位置很常見,引用內存位置即引用特定地址的內存,比如內存通道3(見圖4-1)。

圖4-1 內存通道

內存的基本單位是字節,這并不意味著我們總是按單個數量來處理字節。例如,32位計算機通常將內存組織成4字節塊,而64位計算機通常將內存組織為8字節塊。4字節塊和8字節塊區別很大嗎?這就像四車道或八車道的高速公路,更多的車道可以解決更嚴重的交通擁堵,因為更多的位可以進入數據總線。尋址內存時,我們需要知道我們在尋址什么。尋址長字與尋址字節是不同的,因為在32位計算機上,一個長字有4個字節,而在64位計算機上有8個字節。例如,在圖4-2中,長字地址1包含字節地址4、5、6和7。

圖4-2 內存高速路

從另一個角度來看,32位計算機中的內存包含四個單元,而不是單個單元,每個單元包含兩個雙路復用器。這意味著我們可以尋址單個單元、雙路復用器或整個構件。

你可能已經注意到,每棟大樓都橫跨“高速公路”,因此每個字節都有自己指定的通道,而一個長字就占據了整個道路。位每天乘坐一輛有四個座位的“巴士”往返于市中心,每個字節都有一個座位。車門的設置使得每條車道都有一個座位。在大多數現代計算機上,從市中心出發的“巴士”只在一座大樓前停留。這意味著我們不能從字節5、6、7和8中組成一個長字,因為這需要市中心出發的“巴士”進行兩次行程:一次行駛到1號樓,一次行駛到2號樓。過去的計算機中有一個復雜的裝卸平臺,允許“巴士”這樣做,但是規劃者也注意到往返兩次這點并不是那么實用,所以在新型號的計算機中削減了它的預算?,F在的計算機中的“巴士”試圖同時進入兩個建筑物,如圖4-3所示,稱為非對齊訪問。

圖4-3 對齊和非對齊訪問

正如我們在上一章中看到的,計算機中有很多不同種類的存儲器。每一種的性價比都不同。例如,SRAM雖快但貴,就像行駛在政客們居住處附近的高速公路一樣。磁盤倒是便宜,可慢得像行駛在泥濘的土路。

“巴士”上哪個字節坐哪個座位?當一個長字坐車進城時,字節0或字節3會坐在最左邊的座位上嗎?答案取決于你所使用的處理器,因為設計師們已經把兩種方式都做到了,字節0或3都可以坐到最左邊的座位上。兩種方式都有效,幾乎像神學辯論一樣魔幻。事實上,在Jonathan Swift的《格列佛游記》中,基于小人國和大人國皇家法令的術語,就被用來描述這種區別。

字節0在英特爾處理器這樣的小端機器中占據“巴士”最右邊的位置,在摩托羅拉處理器這樣的大端機器中占據“巴士”最左邊的位置。圖4-4比較了這兩種排列。

圖4-4 大小端式排列

字節順序是在將信息從一個設備傳輸到另一個設備時要記住的一點,因為你不希望無意中將數據打亂。在將UNIX操作系統從PDP-11移植到IBM系列/1計算機時,就有這樣一個值得注意的例子:當16位字中的字節被交換時,一個本應輸出“Unix”的程序卻輸出了“nUxi”。這也夠滑稽的,nuxi綜合征就是指這種字節排序問題。

主站蜘蛛池模板: 乌拉特后旗| 喀什市| 黄梅县| 贞丰县| 棋牌| 宜兰市| 合阳县| 乐至县| 寻乌县| 寻甸| 田阳县| 即墨市| 通化县| 临西县| 来宾市| 峨山| 泽库县| 桂东县| 达拉特旗| 军事| 色达县| 文水县| 福泉市| 文成县| 赣州市| 启东市| 长武县| 洛扎县| 土默特右旗| 江津市| 秦安县| 中阳县| 东辽县| 漳平市| 濮阳市| 万安县| 焦作市| 呼玛县| 兖州市| 苏尼特左旗| 图们市|