我想知道编写c#时这两种内存结构是否有区别?
我已经举了一个例子,两种构造都以相同的速度运行。
for (int i = 0; i < iterations; i++)
{
enArr[i].h = random.Next(0, 1000);
enArr[i].w = random.Next(0, 1000);
enArr[i].sum = Math.Sqrt(enArr[i].h)
+ Math.Sqrt(enArr[i].w);
Console.WriteLine($"AoS Sqr[{i}]: {enArr[i].sum}");
}
vs
for (int i = 0; i < iterations; i++)
{
entities.h[i] = random.Next(0, 1000);
entities.w[i] = random.Next(0, 1000);
entities.sum[i] = Math.Sqrt(entities.h[i])
+ Math.Sqrt(entities.w[i]);
Console.WriteLine($"SoA Sqr[{i}]: {entities.sum[i]}");
}
我希望最后一个可以更快,因为SoA可以提供连续的数据布局,但是执行的过程完全相同。