添加 15 然后应用 &~0xf 有什么作用?
What does adding 15 and then applying &~0xf do?
我有一些代码,我正在研究它在哪里写:
(basenameOffset + (basenameTotal+15)) &~0xf
为什么有人会这样做?它有什么作用?我可以看到~0xf
0xfffffff0
.为什么要阻止最后一点?
它向上舍入到最接近的 16 的倍数。据推测,这是为了固定为basename
分配缓冲区的大小,无论它是什么。:-)
但是,如果这就是它的用途,即决定分配多大的缓冲区,那么这不是一个好的策略。理想情况下,您希望每次扩展 2 倍或至少 1.5 倍。
这是一种常见的算法,四舍五入为二的幂的倍数:
x = x + (pow2 - 1) & ~(pow2 - 1)
几乎可以肯定的是,它被用于确保正确的对齐。通常,使 SIMD 达到最佳(SSE 为 16 字节,AVX 为 32 字节等)基址和/或优化缓存使用率。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用