【问题标题】:Assuring stack pointer alignment using bitwise operators使用按位运算符确保堆栈指针对齐
【发布时间】:2020-11-09 04:52:06
【问题描述】:

假设我想在堆栈上保留8 bytes,并且我还想确保当前stack pointer 是8 字节对齐的。我已经看到一些代码可以确保当前 sp 使用以下逻辑对齐 8 字节:

sp = sp & -8;

他们AND它与他们将在堆栈上保留的数量(当然是负数)。

这个逻辑是如何工作的?

【问题讨论】:

    标签: stack alignment memory-alignment sp stack-pointer


    【解决方案1】:

    之所以有效,是因为负数用二进制补码表示,所以-8 等价于~7,其中 3 个最低有效位为 0,其余为 1。将其与一个值相加会清除 3 个最低有效位,这显然会导致它是 8 字节对齐的。顺便说一下,这个技巧只适用于将事物与 2 的幂对齐。例如,如果您有一些奇怪的理由将事物与 12 字节边界对齐,sp = sp & -12 将无法按预期工作。

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2015-11-16
      相关资源
      最近更新 更多