for(int j = 0; j < 100;)
{
for (int i = 0; i < 500; j++)
{
//Что-то происходит
}
}
// 相同的循环,只有 i 被声明为 500。
for (int j = 0; j < 100; j++)
{
for (int i = 500; i < 1000; i++)
{
//Происходит тоже самое, что и в цикле выше
}
}
我不是从 0 而是从 500 声明“i”这一事实会影响编译速度吗?在这种情况下,“i”本身不参与循环。我不在循环体中使用变量。
只要将值放入相同的类型中,绝对没有区别。然后,编译器有权对其进行优化并将其置于标准类型中,反之亦然,将循环扩展为线性代码。
你对什么目标感兴趣?假设会有显着的加速,5-500 次?或学术兴趣,例如编译器从代码文件中读取 1 或 3 个字符需要多长时间?
程序的最大加速度提供了另一种更优化的算法的选择。例如,缓存内部循环的结果、并行化、选择 O(n) 更好的算法等。如果您有工作代码,您可以发布一个问题要求对其进行审查(请参阅https://ru.stackoverflow.com/tags/code-inspection/info)
如果问题是关于编译时间的,那么提出一个单独的问题,描述配置,给出时间测量等。
无论如何,做这样的微优化(从 500 到 0)是没有意义的,甚至是有害的。
如果该值
i未在循环体中使用,如您所说,那么几乎所有现代编译器都会为循环生成相同的代码i- 只是一个运行 500 次的抽象循环。但尽管如此,关于“速度”的问题在脱离特定环境的情况下并没有有意义的答案。