如果某些内容存储在0x1001 0000,则下一个存储在0x1001 0004.如果我是正确的,32位架构中的内存块各为32位。那么0x1001 0002会指向32位的后半部分吗?
答案 0 :(得分:9)
首先,MIPS架构中的内存地址不会增加4. MIPS使用字节寻址,因此您可以从内存中寻址任何字节(例如,请参阅lb
和lbu
来读取单个字节,lh
和lhu
读半字)。
事实是,如果你读取32位长度的字(4个字节,lw
),那么两个连续的字将彼此相距4个字节。在这种情况下,您可以在第一个单词的地址中加4,以获取下一个单词的地址。
除此之外,如果您阅读单词,则必须将它们以4的倍数对齐,否则您将获得对齐异常。
在您的示例中,如果第一个字存储在0x10010000中,那么下一个字将在0x10010004中,当然前半部分/后半部分将在0x1001000和0x1001002中(排序将取决于endianness建筑)。
答案 1 :(得分:0)
你似乎已经自己回答了这个问题! 32位产生4个字节,所以如果你是推送到堆栈,其中所有元素被推送为相同的大小,每个下一个项目将在下一个项目之前(或之前)4个字节。