在这三个来源之间,效率方面是否存在差异?
for (int i=0; i<N; i++)
int j = whatever();
Run Code Online (Sandbox Code Playgroud)
和
int j;
for (int i=0; i<N; i++)
j = whatever();
Run Code Online (Sandbox Code Playgroud)
和
int i, j;
for (i=0; i<N; i++)
j = whatever();
Run Code Online (Sandbox Code Playgroud)
谢谢.
PS:显然我的问题不是参考变量的范围而是仅仅考虑循环的效率,特别是前两种情况,其中变量j被声明为1次而非N次.
小智 8
一旦代码被编译器优化,就不会有区别。
如果您在调试模式下运行,默认优化关闭,如果您在循环范围内声明变量,则比在循环范围外声明变量效率低。
在这种情况下,对于循环的每次迭代,代码将为堆栈上的变量创建空间,并在迭代后将其丢弃。这有点低效。
但是对于在 for 循环之前或内部声明它的循环变量 (i) 并不重要,因为它只会在堆栈上分配一次。
因此,在调试模式下得出结论,2 和 3 的性能都比 1 好。在发布模式下,所有 3 都将相同。
声明变量对性能没有影响.编译代码后,JIT足够智能,可以预先分配局部变量.
从技术上讲,限制变量的范围可以提高性能,因为它不必在不再需要变量后保留变量,但我怀疑JIT是否足够聪明以便能够解决这个问题.
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |