添加 15 然后应用 &~0xf 有什么作用?

What does adding 15 and then applying &~0xf do?

本文关键字:什么 作用 0xf 然后 应用 添加      更新时间:2023-10-16

我有一些代码,我正在研究它在哪里写:

(basenameOffset + (basenameTotal+15)) &~0xf

为什么有人会这样做?它有什么作用?我可以看到~0xf 0xfffffff0.为什么要阻止最后一点?

它向上舍入到最接近的 16 的倍数。据推测,这是为了固定为basename分配缓冲区的大小,无论它是什么。:-)

但是,如果这就是它的用途,即决定分配多大的缓冲区,那么这不是一个好的策略。理想情况下,您希望每次扩展 2 倍或至少 1.5 倍。

这是一种常见的算法,四舍五入为二的幂的倍数:

x = x + (pow2 - 1) & ~(pow2 - 1)

几乎可以肯定的是,它被用于确保正确的对齐。通常,使 SIMD 达到最佳(SSE 为 16 字节,AVX 为 32 字节等)基址和/或优化缓存使用率。