我在密歇根大學自學計算機體系結構報價。我不明白爲什麼內存佈局爲d starts at 312 to 319 instead of 308 http://www.flickr.com/photos/[email protected]/4442695706/。 (http://www.flickr.com/photos/[email protected]/4442695706/) 也許我並沒有很好地理解Golden rule specified http://www.flickr.com/photos/[email protected]/4441916461/sizes/l/這裏(http://www.flickr.com/photos/[email protected]/4441916461/sizes/l/)。Mips數據佈局計算
0
A
回答
1
第二個鏈接顯示MIPS不能打包變量,因此它們佔用的地址必須落在單詞邊界上。
如果short是半字對齊,它佔用兩個字節,int,是字對齊的,所以它佔用4個字節,double必須是雙字對齊的,因此佔用8個字節。
爲了在這些地方以對準..
在最低有效位(LSB)將指示每隔或每2個字節(半字對準)的零,2個零點表示每4個字節,和3每8個字節零。
Address (4 LSBs)
XXX0 - half word aligned (2 bytes)
XX00 - Word aligned (4 bytes)
X000 - Double word aligned (8 bytes)
雙必須雙字對齊的,因此它不能在308(100110100)啓動,因爲它是唯一對準字(2個LSB = 0),則必須開始在下一雙字對齊312(100111000)
[Addr] [Binary] [Alignment]
300 100101100 Word, Half-Word
301 100101101
302 100101110 Half-Word
303 100101111
304 100110000 Double-Word, Word, Half-Word
305 100110001
306 100110010 Half-Word
307 100110011
308 100110100 Word, Half-Word
309 100110101
310 100110110 Half-Word
311 100110111
312 100111000 Double-Word, Word, Half-Word
0
MIPS上的存儲器訪問是字對齊的,這意味着每次讀取存儲器32位/ 4字節。由於變量「b」是單個字節,所以它實際上讀取地址300-303。如果變量「c」從301開始,處理器必須知道「b」只是一個字節,其他字節爲零,並且可能將其移到LSB位置(或者編譯器必須這樣做)。無論哪種方式,只需在4個字節的邊界(4的倍數)上下載所有內存訪問效率就會更高效。
有關更多信息,請參閱Data Structure Alignment。
相關問題
- 1. MIPS計算器
- 2. MIPS加速計算
- 3. LWUIT:佈局計算問題
- 4. MIPS組件計算斜邊
- 5. 科學計算中的網格數據的內存佈局
- 6. 何時計算GWT標籤的佈局?
- 7. HTML:如何計算佈局邊界
- 8. WPF中的計算器佈局
- 9. 佈局計算持續時間太長
- 10. QVBoxLayout何時重新計算佈局?
- 11. 佈局算法
- 12. MIPS從數據
- 13. 嵌入式軟件的Mips計算
- 14. ARM處理器上的MIPS計算
- 15. 功能的MIPS計算絕對值
- 16. 在MIPS中製作計算器?
- 17. MIPS架構地址由ALU計算
- 18. 計算MIPS上的分支地址
- 19. MIPS計算器不能正常輸出
- 20. 計算數據
- 21. 塊佈局算法
- 22. arbor.js佈局算法
- 23. TensorFlow佈局算法
- 24. 計數布爾運算符
- 25. 計算MIPS中的字符數和空格數
- 26. WPF設計佈局vs編譯佈局
- 27. Android的佈局中的佈局設計
- 28. 算法計算機n元樹的最優佈局?
- 29. Android:選擇佈局/如何爲計算器設計格式
- 30. Android設計佈局
嗨Nate Heinrich:非常感謝您的詳細解釋,它完美地回答了我的問題。但爲什麼「MIPS不能打包變量」或變量需要對齊? 「包變量」會使處理器變慢嗎? – 2010-03-18 07:16:02