1

我有一些代码正在研究它的编写位置:

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

为什么有人会这样做?它有什么作用?我可以看到那~0xf0xfffffff0。你为什么要阻止最后一点?

4

2 回答 2

5

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

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

于 2013-09-06T18:29:41.730 回答
1

这是一种将四舍五入为 2 的幂的倍数的常用算法:

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

它几乎肯定被用来确保正确对齐。通常使 SIMD 优化(SSE 为 16 字节,AVX 为 32 字节等)基地址和/或优化缓存使用。

于 2013-09-06T18:47:34.857 回答