相关疑难解决方法(0)

std :: bitset如何比std :: vector <bool>更快?

根据这个答案,海报期望std::bitset大小100k位比std::vector<bool>查询单个位时更快.这怎么可能?

如果std::bitset显然允许任意大小,他们甚至可能在实施方面有显着差异std::vector

c++

34
推荐指数
2
解决办法
3万
查看次数

将实体与实体组件系统中的系统匹配的有效方式

我正在研究一个面向数据的实体组件系统,其中组件类型和系统签名在编译时是已知的.


一个实体是一个组件的集合体.可以在运行时从实体添加/删除组件.

组件是一个小的逻辑少类.

一个签名是组件类型的编译时间列表.如果实体包含签名所需的所有组件类型,则称该实体与签名匹配.


一个简短的代码示例将向您展示用户语法的外观以及预期用途:

// 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)

c++ optimization performance c++14 entity-component-system

22
推荐指数
3
解决办法
4686
查看次数

我应该使用哪种bitset实现来获得最佳性能?

我目前正在尝试在即时(JIT)编译器中实现各种算法.许多算法在位图上运行,通常称为位集.

在C++中,有多种方法可以实现bitset.作为一名真正的C++开发人员,我更喜欢使用STL中的东西.最重要的方面是表现.我不一定需要动态可调整大小的bitset.

我认为,有三种可能的选择.

I.一种选择是使用std::vector<bool>,它已针对空间进行了优化.这也表明数据不必在内存中连续.我想这可能会降低性能.另一方面,为每个bool值设置一位可以提高速度,因为它非常缓存友好.

II.另一种选择是使用a std::vector<char>.它保证数据在内存中是连续的,并且更容易访问单个元素.但是,使用此选项感觉很奇怪,因为它不是一个bitset.

III.第三种选择是使用实际的std::bitset.事实上它不能动态调整大小并不重要.

我应该选择哪一个以获得最佳性能?

c++ compiler-construction performance bitset

13
推荐指数
2
解决办法
6587
查看次数