0

给定以下定义

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 ...

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

4

1 回答 1

2

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

于 2013-04-05T08:55:10.863 回答