分支预测和优化代码
branch prediction, and optimized code
我有以下一组代码块,这两个代码块的目的相同。
我必须实现第二个块以避免逆逻辑并提高可读性。
顺便说一句,在生产代码中,条件非常复杂。
问题是 - 我知道分支不好,我必须支付多少罚款。
作为一个额外的信息,还请考虑,else分支的概率很高。
X = Get_XValue()
if (X != 5)
{
K = X+3;
.
.
}
X = Get_XValue()
if (X == 5)
{
/*do nothing*/
}
else
{
K = X+3;
.
.
}
这一切都取决于您的编译器。一个好的优化编译器会检测到第二个例子中的 then
-clause 是空的并反转测试。因此,它将为两种情况生成相同的代码,因此根本不会受到惩罚。
附带说明一下,我可以补充一点,我尝试过的所有三个编译器(clang、gcc 和 iccarm)都是这种情况,
我有以下一组代码块,这两个代码块的目的相同。 我必须实现第二个块以避免逆逻辑并提高可读性。 顺便说一句,在生产代码中,条件非常复杂。
问题是 - 我知道分支不好,我必须支付多少罚款。 作为一个额外的信息,还请考虑,else分支的概率很高。
X = Get_XValue()
if (X != 5)
{
K = X+3;
.
.
}
X = Get_XValue()
if (X == 5)
{
/*do nothing*/
}
else
{
K = X+3;
.
.
}
这一切都取决于您的编译器。一个好的优化编译器会检测到第二个例子中的 then
-clause 是空的并反转测试。因此,它将为两种情况生成相同的代码,因此根本不会受到惩罚。
附带说明一下,我可以补充一点,我尝试过的所有三个编译器(clang、gcc 和 iccarm)都是这种情况,