【发布时间】:2013-02-10 16:29:15
【问题描述】:
下面的unix代码需要time命令报告的~9s。
int main()
{
double u = 0;
double v = 0;
double w = 0;
int i;
for (i = 0;i < 1000000000;++i) {
v *= w;
u += v;
}
printf("%lf\n",u);
}
我不明白为什么当我更改 v *= w;withv *= u; 时执行时间几乎翻了一番
【问题讨论】:
-
w始终为零。编译器可能足够聪明,在第一种情况下根本不运行该循环,因为v也将始终为零,因此u也是如此。 (可能更难弄清楚 u 和 v 之间的相互依赖关系。) -
你看生成的代码了吗?
标签: c performance