2010-03-18 103 views

回答

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

嗨Nate Heinrich:非常感謝您的詳細解釋,它完美地回答了我的問題。但爲什麼「MIPS不能打包變量」或變量需要對齊? 「包變量」會使處理器變慢嗎? – 2010-03-18 07:16:02

0

MIPS上的存儲器訪問是字對齊的,這意味着每次讀取存儲器32位/ 4字節。由於變量「b」是單個字節,所以它實際上讀取地址300-303。如果變量「c」從301開始,處理器必須知道「b」只是一個字節,其他字節爲零,並且可能將其移到LSB位置(或者編譯器必須這樣做)。無論哪種方式,只需在4個字節的邊界(4的倍數)上下載所有內存訪問效率就會更高效。

有關更多信息,請參閱Data Structure Alignment