最有效的访问坐标的方法

时间:2013-04-05 08:50:04

标签: c++

给出以下定义

union {
  double coords[3];
  struct {
    double x,y,z;
  };
} p;

可以通过索引和名称访问3D点的坐标(两种方式都有其优点)。但他们是等同的吗?更确切地说:将使用以下表达式

... p.coords[0] ... p.x ...
... p.coords[1] ... p.y ...
... p.coords[2] ... p.z ...

(成对,每行)生成相同的(汇编)代码?两种访问坐标的方式之间的效率是否存在差异?

1 个答案:

答案 0 :(得分:2)

p.x,...可能会更快,但是人们会注意到的差别不大。 当你使用数组时,在给定索引中每个double的大小乘以一段时间来获得所需的内存地址;但在另一种方法(p.x,...)中,编译器知道我们正在访问的地址,因此不需要进行计算。 但是,如果编译器足够聪明以找出常数,那就没有区别了。