C# 初始化结构中不安全的固定双数组
这个问题是我们的后续问题。 我有以下结构:C# 初始化结构中不安全的固定双数组,c#,unsafe,C#,Unsafe,这个问题是我们的后续问题。 我有以下结构: [StructLayout(LayoutKind.Explicit, Size = 120, CharSet = CharSet.Unicode)] public unsafe struct DynamicState { [FieldOffset(0)] public fixed double Position[3]; [FieldOffset(24)] public fixed double Velocity[3];
[StructLayout(LayoutKind.Explicit, Size = 120, CharSet = CharSet.Unicode)]
public unsafe struct DynamicState
{
[FieldOffset(0)]
public fixed double Position[3];
[FieldOffset(24)]
public fixed double Velocity[3];
[FieldOffset(48)]
public fixed double Acceleration[3];
[FieldOffset(72)]
public fixed double Attitude[3];
[FieldOffset(96)]
public fixed double AngularVelocity[3];
}
如果我尝试初始化这样的数组:
var dynamicState = new DynamicState();
double[] array = new double[] { 1, 2, 3 };
fixed (double* pArray = array)
{
dynamicState.Acceleration = pArray;
}
我得到以下错误:赋值的左侧必须是变量、属性或索引器
初始化作为结构一部分的不安全数组的正确方法是什么?简单的方法似乎有效:
我不能说我对非托管代码有很多经验,但至少值得看看这些选项……它对性能很敏感。然而,如果dynamicstate不安全,编译器会优化它吗?他可能会使用PInvoke
cmemset
函数。它太快了(虽然它对浮点数不是很好)@Seth:我不喜欢对优化猜太多:)看看第二个是否适合你——它可能会更快。
for (int i = 0; i < 3; i++)
{
dynamicState.AngularVelocity[i] = array[i];
}
Marshal.Copy(array, 0, new IntPtr(dynamicState.AngularVelocity), array.Length);