c++ - 哪一个工作得更快?
问题描述
这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
. 更多细节可以在这里找到。
推荐阅读
- javascript - 如何在多个 Google 表格中使用多个 OnEdit 功能
- c# - 能够合并冲突的 Visual Studio 2019 新 Git 体验
- mapbox - Mapbox Directions,自定义路线源
- javascript - 为什么即使我正在处理正在发生的假定错误,我的 nodejs 服务器也会崩溃?
- java - java - 如何从带有数组的csv文件中删除记录
- python - 在 python 中创建自己的 haar 级联模型时出错
- c++ - 使用 R 中的多维数值积分加速 for 循环
- spring - 带有 Spring 缓存和咖啡因的 Spring Cloud Gateway
- python - -Axis 上的日期显示为 1 月 51 日而不是 1 月 20 日
- javascript - 隐藏表格html中的空列