2010-03-18 62 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