根据这个答案,海报期望std::bitset大小100k位比std::vector<bool>查询单个位时更快.这怎么可能?
如果std::bitset显然允许任意大小,他们甚至可能在实施方面有显着差异std::vector?
我正在研究一个面向数据的实体组件系统,其中组件类型和系统签名在编译时是已知的.
一个实体是一个组件的集合体.可以在运行时从实体添加/删除组件.
甲组件是一个小的逻辑少类.
一个签名是组件类型的编译时间列表.如果实体包含签名所需的所有组件类型,则称该实体与签名匹配.
一个简短的代码示例将向您展示用户语法的外观以及预期用途:
// User-defined component types.
struct Comp0 : ecs::Component { /*...*/ };
struct Comp1 : ecs::Component { /*...*/ };
struct Comp2 : ecs::Component { /*...*/ };
struct Comp3 : ecs::Component { /*...*/ };
// User-defined system signatures.
using Sig0 = ecs::Requires<Comp0>;
using Sig1 = ecs::Requires<Comp1, Comp3>;
using Sig2 = ecs::Requires<Comp1, Comp2, Comp3>;
// Store all components in a compile-time type list.
using MyComps = ecs::ComponentList
<
Comp0, Comp1, …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在即时(JIT)编译器中实现各种算法.许多算法在位图上运行,通常称为位集.
在C++中,有多种方法可以实现bitset.作为一名真正的C++开发人员,我更喜欢使用STL中的东西.最重要的方面是表现.我不一定需要动态可调整大小的bitset.
我认为,有三种可能的选择.
I.一种选择是使用std::vector<bool>,它已针对空间进行了优化.这也表明数据不必在内存中连续.我想这可能会降低性能.另一方面,为每个bool值设置一位可以提高速度,因为它非常缓存友好.
II.另一种选择是使用a std::vector<char>.它保证数据在内存中是连续的,并且更容易访问单个元素.但是,使用此选项感觉很奇怪,因为它不是一个bitset.
III.第三种选择是使用实际的std::bitset.事实上它不能动态调整大小并不重要.
我应该选择哪一个以获得最佳性能?