c++ - 计算先前对齐的地址

标签 c++

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

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/

相关文章:

c++ - 具有多个阵列的共享内存的 CUDA 减少

c++ - Valgrind 是否/可以使用多个处理器?

c++ - 在c++中,虚函数、函数覆盖和多态性是否相互关联?

c++ - union 不会接受类型为 'string' 的成员

c++ - 在解析相同的参数时,有时会出现段错误

c++ - 模板参数中的自引用模板

c++ - 如何从无符号变量写入和读取字节

c++ - 如果我们将 std::cout 应用于指向成员的指针,我们将收到什么值

c++ - 为什么我的带有 boost::future's .then 的链式方法没有被调用?

c++ - for 循环结束自身并终止正在运行的程序,但在删除斜率计算语句时正确运行