我在密歇根大学自学计算机体系结构报价。我不明白为什么内存布局为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. LWUIT:布局计算问题
- 2. 科学计算中的网格数据的内存布局
- 3. 布局计算持续时间太长
- 4. HTML:如何计算布局边界
- 5. 何时计算GWT标签的布局?
- 6. QVBoxLayout何时重新计算布局?
- 7. 布局算法
- 8. MIPS架构地址由ALU计算
- 9. 嵌入式软件的Mips计算
- 10. 计算MIPS上的分支地址
- 11. MIPS计算器不能正常输出
- 12. 计算数据
- 13. TensorFlow布局算法
- 14. 块布局算法
- 15. 计数布尔运算符
- 16. Android的布局中的布局设计
- 17. WPF设计布局vs编译布局
- 18. 计算MIPS中的字符数和空格数
- 19. 算法计算机n元树的最优布局?
- 20. Android:选择布局/如何为计算器设计格式
- 21. Android布局设计
- 22. Android设计布局
- 23. WPF - 布局设计
- 24. 移调数据布局
- 25. 数据库布局帮助
- 26. 数据库表布局
- 27. Mysql数据库布局
- 28. 数据输入布局(XAML)
- 29. 计算数据域
- 30. 计算从数据
嗨Nate Heinrich:非常感谢您的详细解释,它完美地回答了我的问题。但为什么“MIPS不能打包变量”或变量需要对齐? “包变量”会使处理器变慢吗? – 2010-03-18 07:16:02