我有一些代码正在研究它的编写位置:
(basenameOffset + (basenameTotal+15)) &~0xf
为什么有人会这样做?它有什么作用?我可以看到那~0xf
是0xfffffff0
。你为什么要阻止最后一点?
我有一些代码正在研究它的编写位置:
(basenameOffset + (basenameTotal+15)) &~0xf
为什么有人会这样做?它有什么作用?我可以看到那~0xf
是0xfffffff0
。你为什么要阻止最后一点?
它四舍五入到最接近的 16 的倍数。据推测,这是为了确定为 分配缓冲区的大小basename
,无论它是什么。:-)
但是,如果这就是它的用途,即决定分配多大的缓冲区,那么这不是一个好策略。理想情况下,您希望每次扩展 2 倍或至少 1.5 倍。
这是一种将四舍五入为 2 的幂的倍数的常用算法:
x = x + (pow2 - 1) & ~(pow2 - 1)
它几乎肯定被用来确保正确对齐。通常使 SIMD 优化(SSE 为 16 字节,AVX 为 32 字节等)基地址和/或优化缓存使用。