我想在C#中将一个浮点数数组对齐到16字节边界。
我知道的一种技术是钉住数组: http://meekmaak.blogspot.ca/2010/06/c-memory-aligned-array-wrapper-for-fast.html
我不喜欢钉住内存的想法。我担心它可能会影响垃圾回收的性能。
还有其他技术吗?我正在考虑创建一个16字节结构,分配一个由此结构组成的数组,然后将该数组转换为浮点数数组。
[StructLayout(LayoutKind.Explicit)]
public struct Float4 {
[FieldOffset(0)] public float X;
[FieldOffset(4)] public float Y;
[FieldOffset(8)] public float Z;
[FieldOffset(12)] public float W;
}
我不确定下一步该怎么做(不同类型数组之间的转换),以及最好的方法是什么?
FieldOffset
似乎毫无意义。你认为编译器会以什么方式布局呢?你链接的代码看起来很合理。我不认为你会在托管类型上取得任何进展。为什么.NET会将你的结构体对齐到16字节边界上呢?本机代码在这里表现得非常好。 - David Heffernan