bitset比bool更快吗?

时间:2016-08-07 09:04:13

标签: c++

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

3 个答案:

答案 0 :(得分:7)

正确的是进行测量。

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

在嵌入式系统编译器中,许多人使用真实的位集,因为在这种程序中使用位是必不可少的。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我有同样的问题,所以我为搜索序列设定了基准。因为bitset没有迭代器,所以我不得不为bitset做一个“ std :: search”替代。

c-lang 8.0结果:

64 bits => bitset 1.2 times slower than array
128 bits => bitset 1.4 times slower than array
1024 bits => bitset 1.5 times slower than array
4096 bits => bitset 1.5 times slower than array

gcc 9.1结果:

64 bits => bitset 1.6 times faster than array
128 bits => bitset 1.5 times faster than array
1024 bits => bitset 1.4 times faster than array
4096 bits => bitset 1.4 times faster than array

总计意外结果。

可以在此处运行基准测试http://quick-bench.com/-er6qDrx0dPmJ0rGnJ9t3EpLoMM