我目前正在尝试在即时 (JIT) 编译器中实现各种算法。许多算法在位图上运行,通常称为位集。
在 C++ 中,有多种实现位集的方法。作为一个真正的 C++ 开发人员,我更喜欢使用来自 STL 的东西。最重要的方面是性能。我不一定需要动态调整大小的位集。
在我看来,有三种可能的选择。
I. 一种选择是使用std::vector<bool>
,它已针对空间进行了优化。这也表明数据在内存中不必是连续的。我想这可能会降低性能。另一方面,每个布尔值都有一个位可以提高速度,因为它对缓存非常友好。
二、另一种选择是改用std::vector<char>
. 它保证数据在内存中是连续的,并且更容易访问单个元素。然而,使用这个选项感觉很奇怪,因为它不是一个位集。
三、第三种选择是使用实际的std::bitset
. 它不是动态调整大小的事实并不重要。
我应该选择哪一个以获得最佳性能?