哪一个工作得更快?
这2个有什么区别吗?
if (condition)
{
std::cout << "Condition is true";
}
else
{
std::cout << "Condition is false";
}
或者
if (condition)
{
std::cout << "Condition is true";
return 0;
}
std::cout << "Condition is false";
我知道使用第二个是不好的,因为也许你后面还有更多的代码。但是在代码的最后我们没有其他任何东西,使用第二个不是更好吗?
回答
我对原始问题进行了如下修改,
void f1() {
int a = 0;
if (a > 0) {
a = 1;
} else {
a = 2;
}
}
void f2() {
int a = 0;
if (a > 0) {
a = 1;
return;
}
a = 2;
}
这是编译后的程序集。f1()并且f2()几乎相同。
f1():
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 0
cmp DWORD PTR [rbp-4], 0
jle .L2
mov DWORD PTR [rbp-4], 1
jmp .L4
.L2:
mov DWORD PTR [rbp-4], 2
.L4:
nop
pop rbp
ret
f2():
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 0
cmp DWORD PTR [rbp-4], 0
jle .L6
mov DWORD PTR [rbp-4], 1
jmp .L5
.L6:
mov DWORD PTR [rbp-4], 2
.L5:
pop rbp
ret
唯一的区别是.L4有一个nop. 可以在此处找到更多详细信息。
- 同意。我的观点是,即使在编译器优化之前,它们在汇编级别也没有太大区别。
- 这就是没有编译器优化的编译程序集。如果没有打开优化,程序集的性能可能会很差