【问题标题】:Working out address alignment解决地址对齐问题
【发布时间】:2009-08-16 00:19:24
【问题描述】:

您如何仅通过查看地址来确定地址的对齐方式?

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

那又怎样:

0x12345671 0x12345672 0x12345673

等等?

干杯, 乔恩

【问题讨论】:

    标签: c++ alignment


    【解决方案1】:

    如果 A mod n 为 0,则地址 A 是 n 对齐的。所以 0x12345671 和 0x12345673 是 1 对齐的,而 0x12345672 是 2 对齐的。 0x12345670 同时是 1 对齐、2 对齐、4 对齐、8 对齐和 16 对齐。您只提到了两个的最高幂(因为隐含了较低的幂)。

    【讨论】:

      【解决方案2】:

      你看看结尾的十六进制数字:

      • 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-aligned 0x12345620 不也是 16-aligned 吗? 0x12345620 % 16 为 0。
      • @Jon,但它 0x12345620 % 32 也是 0,所以你给最高的一个(我以实际的方式完成了马丁的答案)
      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多