C++ 我需要一个C+中的无限位掩码+;

C++ 我需要一个C+中的无限位掩码+;,c++,bit-masks,C++,Bit Masks,可跳过的上下文:我有一个模拟循环(),它实例化了根据用户输入和/或文件配置动态生成的类,这些类来自一个由数百万个组件组成的数据库 我已经实现了一个系统,每当用户输入/配置忽略一个事实,即其中一个选项需要额外的组件时,该系统会自动推断(某种逻辑单元/数学,我不知道其名称)并应用所需的组件 怎么会这样?许多组件是复杂的公式或模糊逻辑(gates?)或其他复杂的科学推理,其编码方式可以操作我的模拟的结构、对象、环境,因此,有时一个组件依赖于另一个组件,我需要“演绎算法/系统”能够将这种依赖传递给类构造

可跳过的上下文:我有一个模拟循环(),它实例化了根据用户输入和/或文件配置动态生成的类,这些类来自一个由数百万个组件组成的数据库

我已经实现了一个系统,每当用户输入/配置忽略一个事实,即其中一个选项需要额外的组件时,该系统会自动推断(某种逻辑单元/数学,我不知道其名称)并应用所需的组件

怎么会这样?许多组件是复杂的公式或模糊逻辑(gates?)或其他复杂的科学推理,其编码方式可以操作我的模拟的结构、对象、环境,因此,有时一个组件依赖于另一个组件,我需要“演绎算法/系统”能够将这种依赖传递给类构造函数

我在决定存储这些“知识片段”时使用了最大粒度,因为考虑到模拟的大小和计算强度以及单个实例的数量,我真的不能浪费任何内存,但现在我正在处理单个实例需要数千个,有时是上万个组件的问题,我需要实例的“创建图”作为私有成员保存并仍然绑定,这样我就可以:1-知道我的演绎在哪里引导实例的构造函数,并且可能能够使用记忆来减少构建时间;第2步-在模拟过程中向活动实例注入更改

我认为我需要的:我需要一个可能是无限的或至少是很长的 位掩码,因此我可以更快地迭代创建,并让最终 动态构造对象的组件树已记录以备将来使用 使用

我不知道是否可行的可能方法:1st-手动 并在每个RAM单元中顺序存储位标志的值, 使用RAM晶片作为我的位掩码。第二-将地图分解为 已知大小的较小位掩码(由于 在创建完成并解耦组件之前,组件是未知的 演绎甚至可能是不可能的 重构整个系统)。第三,找出一种方法,使 无限位掩码,或者使用一些实现了 长整数(5.12e+11或更大)

<我的代码是用C++编写的,我的渲染和计算内核是Vulkan。 我的客观问题: 如何实现内存和计算效率都很高的任意长位掩码

如果我被允许回答一个额外的问题,假设我没有架构(软件和硬件)约束,那么实现这种位掩码的最有效方法是什么

我无法在模拟期间浏览对象的树,也无法在注入修改之前暂停模拟并等待浏览完成,我需要知道并能够以预定方式和实时方式对模拟的任意帧进行任意更改

实现这种位掩码最有效的方法是什么

将std::vector放在那里并配置文件。如果/当你发现你花了大量的时间处理这个向量,请进一步阅读

没有最有效的方法,这完全取决于您的代码如何处理这些位

一种标准方法是保持整数的连续向量,并将其视为位向量。例如,Windows上的
std::vector
使用32位值,每个值中保留32个布尔值

然而,std::vector的API过于通用。如果您的向量大部分是0-s或1-s,那么您将能够比std::vector更快地实现许多操作(获取值、查找第一个/下一个/上一个0/1)

此外,根据您的访问模式,您可能需要更小或更大的元素。如果您决定使用大型SIMD类型,即
\uuuuM128i
\uuuuM256i
,请不要忘记它们的对齐方式

实现这种位掩码最有效的方法是什么

将std::vector放在那里并配置文件。如果/当你发现你花了大量的时间处理这个向量,请进一步阅读

没有最有效的方法,这完全取决于您的代码如何处理这些位

一种标准方法是保持整数的连续向量,并将其视为位向量。例如,Windows上的
std::vector
使用32位值,每个值中保留32个布尔值

然而,std::vector的API过于通用。如果您的向量大部分是0-s或1-s,那么您将能够比std::vector更快地实现许多操作(获取值、查找第一个/下一个/上一个0/1)


此外,根据您的访问模式,您可能需要更小或更大的元素。如果您决定使用大型SIMD类型,即
\uuuum128i
\uuuum256i
,请不要忘记它们的对齐方式。

std::vector
std::bitset
bitset
矢量?您能给我们展示一下您到目前为止遇到的问题吗?@HolyBlackCat:发誓jar.
std::vector
std::bitset
bitset
vector
?您能否向我们介绍一下您目前的情况和存在的问题?@HolyBlackCat:ware-jar。