我目前正在尝试在即时编译器(JIT)中实现各种算法。许多算法操作的是位图,更常被称为位集。
在C++中,有多种实现位集的方法。作为真正的C++开发人员,我更倾向于使用STL中的内容。最重要的方面是性能。我并不一定需要一个动态可调整大小的位集。
我认为有三个可能的选择:
I. 一种选项是使用已经为空间进行了优化的std::vector<bool>
。这也说明数据不必在内存中是连续的。我猜这会降低性能。另一方面,每个布尔值都有一个位,这可能会提高速度,因为它非常缓存友好。
II. 另一个选项是改用std::vector<char>
。它保证数据在内存中是连续的,易于访问单个元素。然而,使用这个选择感觉很奇怪,因为它并不打算成为位集。
III. 第三个选项是使用实际的std::bitset
。它不具备动态调整大小的功能。
哪一个才是我应该选择的最佳性能?
vector<char>
可能比位集更快,因为它不需要进行位移/掩码操作。但是,当访问较少/更大时,由于更大的内存占用量导致更高的缓存未命中率可能会抵消这种好处。 - Grizzly