计算先前对齐的地址

时间:2018-08-04 04:27:43

标签: c++

要获取给定指针和对齐方式的下一个对齐地址,请使用ppl:

inline int OffsetRequiredForAlignment( uintptr_t address_p, int alignment_p ){

    uintptr_t mask = alignment_p - 1;
    uintptr_t amountMisaligned = (address_p & mask );
    int offset = (int)(alignment_p - amountMisaligned);

    if( offset == alignment_p ) offset = 0;

    return offset;
}

或其他形式。 您如何计算先前对齐的地址?

1 个答案:

答案 0 :(得分:3)

下一个对齐的地址是address_p + offset。上一个对齐的地址是address_p - amountMisaligned

此外,偏移量可能应该是:

int offset = (alignment_p - int(amountMisaligned)) & int(mask);

然后您可以消除if语句。