解决地址对齐问题

3

仅凭地址本身如何确定其对齐方式?

在一个32位系统中,一个地址为0x12345670表示它是16字节对齐的(因为末尾是0)对吗?

那么0x12345671、0x12345672、0x12345673等呢?

谢谢,Jon

2个回答

6

如果一个地址A mod n等于0,则称地址A是n对齐的。因此,0x12345671和0x12345673是1对齐的,而0x12345672是2对齐的。0x12345670同时是1对齐、2对齐、4对齐、8对齐和16对齐的。您只需要提到最高的2的幂次方(因为较低的幂次方是隐含的)。


4
您看一下最后几个十六进制数字:
  • 1、3、5、7、9、B、D、F:1对齐
  • 2、6、A、E:2对齐
  • 4、B:4对齐
  • 8:8对齐
  • 10、30、50、70、90、B0、D0、F0:16对齐
  • 20、60、A0、E0:32对齐
  • 40、B0:64对齐
  • 80:128对齐
  • 00:256对齐或更高…

10、30、50、70、90、B0、D0、F0:16对齐。难道0x12345620也是16对齐的吗?0x12345620 % 16等于0。 - Jon
@Jon,但是0x12345620%32也是0,所以你给出了最高的一个(我通过一种实际的方法完成了Martin的答案)。 - AProgrammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接