在循环内部或外部声明变量有很大区别吗?

Sat*_*ato 1 c performance variable-declaration

例如

int i, a, c, d; // these vars will only be used in while
while(bigNumber--) {
    i = doSomething();
    // **

}
Run Code Online (Sandbox Code Playgroud)

while(bigNumber--) {
   int i, a, b, c; // i'd like to put it here for readability
   i = doSomething();
   // **
}
Run Code Online (Sandbox Code Playgroud)

它在性能方面有很大区别吗?

msc*_*msc 5

是的。两种情况下变量的范围i都不同。

在第一种情况下,我在块或函数中声明了一个变量。因此,您可以在块或函数中访问它。

在第二种情况下,我在 while 循环中声明了一个变量。因此,您只能在 while 循环中访问它。

它在性能方面有很大区别吗?

,你在哪里声明它在性能方面并不重要。

例如1:

int main()
{
    int i, bigNumber;

    while(bigNumber--) {
        i = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

集会

main:
  push rbp
  mov rbp, rsp
.L3:
  mov eax, DWORD PTR [rbp-4]
  lea edx, [rax-1]
  mov DWORD PTR [rbp-4], edx
  test eax, eax
  setne al
  test al, al
  je .L2
  mov DWORD PTR [rbp-8], 0
  jmp .L3
.L2:
  mov eax, 0
  pop rbp
  ret
Run Code Online (Sandbox Code Playgroud)

示例2:

int main()
{
    int bigNumber;

    while(bigNumber--) {
        int i;
        i = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

集会

main:
  push rbp
  mov rbp, rsp
.L3:
  mov eax, DWORD PTR [rbp-4]
  lea edx, [rax-1]
  mov DWORD PTR [rbp-4], edx
  test eax, eax
  setne al
  test al, al
  je .L2
  mov DWORD PTR [rbp-8], 0
  jmp .L3
.L2:
  mov eax, 0
  pop rbp
  ret
Run Code Online (Sandbox Code Playgroud)

两者生成相同的汇编代码。