要获取下一个对齐地址,给定指针和对齐方式,请使用:
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语句了。
关于c++ - 计算先前对齐的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682422/