我在密歇根大学自学计算机体系结构报价。我不明白为什么内存布局为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