计算以前对齐的地址

Computing Previously Aligned Address

本文关键字:地址 对齐 计算      更新时间:2023-10-16

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

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;
}

或者是某种变体。如何计算上一个对齐的地址?

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

此外,偏移量可能为:

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

然后可以消除if语句。