给出以下定义
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 ...
(成对,每行)生成相同的(汇编)代码?两种访问坐标的方式之间的效率是否存在差异?
答案 0 :(得分:2)
p.x,...
可能会更快,但是人们会注意到的差别不大。
当你使用数组时,在给定索引中每个double的大小乘以一段时间来获得所需的内存地址;但在另一种方法(p.x,...
)中,编译器知道我们正在访问的地址,因此不需要进行计算。
但是,如果编译器足够聪明以找出常数,那就没有区别了。