设有 N 个物体的坐标 (x, y, z) 和速度 (vx, vy, vz),求经过 dt 时间之后物体的新坐标,以下有两种方式(C++):
方法一:
struct Object {
float x, y, z;
float vx, vy, vz;
};
Object obj[N];
for (int i = 0; i < N; i++) {
obj[i].x += obj[i].vx * dt;
obj[i].y += obj[i].vy * dt;
obj[i].z += obj[i].vz * dt;
}
方法二:
struct ObjectArray {
float x[N], y[N], z[N];
float vx[N], vy[N], vz[N];
};
ObjectArray obj_all;
for (int i = 0; i < N; i++) {
obj_all.x[i] += obj_all.vx[i] * dt;
obj_all.y[i] += obj_all.vy[i] * dt;
obj_all.z[i] += obj_all.vz[i] * dt;
}
在最高级别的优化选项(-O3)下,两种方式运行速度相比()