二维阵列与结构(C ++)

时间:2012-02-06 20:58:46

标签: c++ multidimensional-array struct

如果执行速度很重要,我应该使用它吗,

struct myType {

    float dim[3];
};

myType arr[size];

或将2D数组用作arr[size][index]

6 个答案:

答案 0 :(得分:2)

没关系。无论在几乎所有情况下,编译器都将生成完全相同的代码。唯一的区别是如果结构引发了某种填充,但考虑到你有浮动似乎不太可能。

答案 1 :(得分:1)

完全没有区别。选择更具可读性的内容。

除非你在一些奇怪的平台上工作,否则这两者的内存布局将是相同的 - 对于编译器来说,这是最重要的。

答案 2 :(得分:1)

唯一的区别是当你将某些东西传递给一个函数时。 当您使用数组解决方案时,您永远不会复制数组包含但只是传递数组地址。 如果在结构解决方案的情况下没有显式传递结构地址,则将始终复制结构。

答案 3 :(得分:1)

这取决于您的使用案例。如果通常将三维一起使用,则结构组织可以是合理的。特别是当单独使用维度时,阵列布局最有可能提供更好的性能:现代处理器不仅仅加载单个单词而是加载缓存行单元。如果仅使用部分数据,则会加载未使用的单词。

阵列布局也更易于并行处理,例如:使用SIMD操作。这在一定程度上是不幸的,因为对象布局通常是不同的。实际上,你使用的数组可能是相似的,但是如果你改变成为float array[3][size]的东西就会变得不同。

答案 4 :(得分:1)

另外要注意另一个提到的海报:如果昏暗在结构中总是大小为3,但该集合实际上代表了类似于"红色,绿色,蓝色和#34;或" X,Y,Z"或者" Car,Truck,Boat",从维护的角度来看,你最好不要把它们分开。也就是说,使用像

这样的东西
typedef struct VEHICLES  
{  
  float fCar;  
  float fTruck;  
  float fBoat;  
} Vehicles;  

那样当你两年后回来调试它,或者别人不得不看它时,他们就不必猜测dim [0],dim [1]和dim [2]是指什么。 / p>

答案 5 :(得分:0)

您可能希望将2d数组映射到1d。可能更加缓存友好