如果执行速度很重要,我应该使用它吗,
struct myType {
float dim[3];
};
myType arr[size];
或将2D数组用作arr[size][index]
答案 0 :(得分:2)
没关系。无论在几乎所有情况下,编译器都将生成完全相同的代码。唯一的区别是如果结构引发了某种填充,但考虑到你有浮动似乎不太可能。
答案 1 :(得分:1)
完全没有区别。选择更具可读性的内容。
除非你在一些奇怪的平台上工作,否则这两者的内存布局将是相同的 - 对于编译器来说,这是最重要的。
答案 2 :(得分:1)
唯一的区别是当你将某些东西传递给一个函数时。 当您使用数组解决方案时,您永远不会复制数组包含但只是传递数组地址。 如果在结构解决方案的情况下没有显式传递结构地址,则将始终复制结构。
答案 3 :(得分:1)
这取决于您的使用案例。如果通常将三维一起使用,则结构组织可以是合理的。特别是当单独使用维度时,阵列布局最有可能提供更好的性能:现代处理器不仅仅加载单个单词而是加载缓存行单元。如果仅使用部分数据,则会加载未使用的单词。
阵列布局也更易于并行处理,例如:使用SIMD操作。这在一定程度上是不幸的,因为对象布局通常是不同的。实际上,你使用的数组可能是相似的,但是如果你改变成为float array[3][size]
的东西就会变得不同。
答案 4 :(得分:1)
typedef struct VEHICLES
{
float fCar;
float fTruck;
float fBoat;
} Vehicles;
那样当你两年后回来调试它,或者别人不得不看它时,他们就不必猜测dim [0],dim [1]和dim [2]是指什么。 / p>
答案 5 :(得分:0)
您可能希望将2d数组映射到1d。可能更加缓存友好