【发布时间】:2015-05-03 08:37:20
【问题描述】:
我正在寻找 .Net 中的一种数据结构,它使异构结构在内存中保持连续,以便对 cpu-cache 友好。
这种类型的数据结构在此博客中进行了解释:T-machine.org 在迭代 4。
在 .Net 中,值类型(结构)数组使数据在内存中保持连续,但这仅适用于非泛型数组。
我试图创建一个ValueType[],但结构是装箱的。所以引用在内存中是连续的,而不是真实的数据。
经过多次尝试,我认为这在 .Net 中是不可能的。我看到的唯一可能的解决方案是手动管理字节数组中结构的序列化和反序列化,但我认为它不会高效。
您找到本地解决方案了吗?还是我的更好的解决方案?
编辑 1: 我正在尝试实现T-Machine.org 博客中描述的实体组件系统。
【问题讨论】:
-
如果你需要的数据结构的类型是固定的,你可以把它们放在另一个结构中......所以
struct PositionVelocity { Position Pos; Velocity Vel } -
您可以使用两个不同的数组,这也可以减少填充,如果不是“大结构”的所有字段都同样热,那就特别好。无论如何,你能提供更多关于你在做什么的细节吗?然后我们可以给出一个更有针对性的解决方案。
-
@xanatos 不幸的是,我在编译时不知道所有结构类型。此外,我可以有一个位置,然后是一个速度,然后是另一个速度。
标签: c# .net data-structures cpu-cache