小编Gre*_*reg的帖子

Visual Studio 编译器在简单 if 语句的分支预测方面有多好?

下面是一些 C++ 伪代码作为示例:

bool importantFlag = false;
for (SomeObject obj : arr) {
    if (obj.someBool) {
        importantFlag = true;
    }
    obj.doSomethingUnrelated();
}
Run Code Online (Sandbox Code Playgroud)

显然,一旦 if 语句评估为 true 并运行内部代码,就没有理由再次执行检查,因为无论哪种方式结果都是相同的。编译器是否足够聪明,能够识别这一点,还是会在每次循环迭代中继续检查 if 语句,并可能再次将 importantFlag 冗余地分配为 true?如果循环迭代次数很大,并且无法跳出循环,则这可能会对性能产生显着影响。

我通常会忽略这些情况,只是将信心寄托在编译器上,但如果能确切地知道它如何处理这些情况,那就太好了。

c++ visual-studio branch-prediction

0
推荐指数
1
解决办法
363
查看次数

标签 统计

branch-prediction ×1

c++ ×1

visual-studio ×1