要获取给定指针和对齐方式的下一个对齐地址,请使用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;
}
或其他形式。 您如何计算先前对齐的地址?
答案 0 :(得分:3)
下一个对齐的地址是address_p + offset
。上一个对齐的地址是address_p - amountMisaligned
。
此外,偏移量可能应该是:
int offset = (alignment_p - int(amountMisaligned)) & int(mask);
然后您可以消除if语句。