【发布时间】:2016-12-28 11:14:37
【问题描述】:
for (int i = 0; i < foo + bar; ++i)
{
// do something
}
假设foo + bar 是一个巨大的数字,并且它的值在循环迭代期间不会改变。 (也就是说,循环体不会改变foo 或bar)
foo + bar 的值是否缓存在某处?还是每次都重新评估?
C/C++ 的处理方式是否与 Java 等高级语言不同?
【问题讨论】:
-
选择第一名的语言。行为可能非常不同。
-
好吧,我确实提到了 Java 和 C++
-
您可以尝试将
foo + bar替换为实际数字,试一试,看看哪个花费的时间最长,实际差异有多大。 -
这遗漏了一些细节。
foo是什么,bar是什么?operator+函数是否涉及内联(甚至可能是内置函数?)并且foo和bar的地址是否逃脱了循环,它们甚至是全局/文件范围吗? -
嗯,与 C++ 相比,Java 不是“高级语言”,除了 Java 头的狂热梦想。
标签: java c++ caching compiler-optimization cpu-cache