bitset比bool更快吗?

enr*_*cis 2 c++

C++提供了bitset存储位.根据引用,该类模拟bool元素数组,但针对空间分配进行了优化.在哪种情况下,一个应该优先于另一个?

Isr*_*man 7

正确的是进行测量.

尽管如此,正如我记得的那样,有关位集的文档总是说有点集不能保证是真正的位,它只是对编译器的推荐和位操作的方便语法.

在嵌入式系统编译器中,许多使用真实的位集,因为在这种类型的程序中使用位是真正必需的.

至于速度,相反更合理 - 通过索引处理数组更简单.使用位需要更多的数学运算,访问正确的字然后访问正确的位.


bob*_*bah 2

您需要对您的用例进行基准测试。

  • 的传统实现bitset<N>是使用每元素位和array<bool, N>每元素字节,因此前者具有更高的变化以适应 L1d..LLd,因此对于关键大小的位掩码可能更快,至少在执行串行访问时
  • bitset<N>进行更多数学运算,因此在某些访问模式(高度随机)下可能会更慢
  • 当并发访问时,array<bool, N>每个元素的争用会更少,因此性能在很大程度上取决于访问模式。

添加2020.09

我通常uint64_t直接使用 -s 和编译器内在函数来扫描/计数。对于可以使用它的用例(好吧,用于跟踪最多 64 个东西),它击败了 OP 询问的两种替代方案。