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)
它在性能方面有很大区别吗?
是的。两种情况下变量的范围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)
两者生成相同的汇编代码。