【问题标题】:Empty If OptimizationEmpty If 优化
【发布时间】:2016-10-11 17:12:33
【问题描述】:

考虑以下几点:

int status = 0;

while(status < 3)
{
    switch(status)
    {
        case 0:
            // Do something
            break;

        case 1:
            if(cond1 && cond2 || cond3 && cond4)
                ; // status = 1
            else if(cond5)
                status = 2;
            else
                status = 0;
            // there could be more else-if statements
            break;

        case 2:
            // Do something else
            break;
    }
    status++;
}

鉴于第一个 if 语句只是为了可读性而存在,并且如图所示,它的主体是空的(因为冗余),我想知道编译器如何(提前或只是-in-time 编译器)可能会对此进行优化(如果可以进行任何优化)。

【问题讨论】:

  • 这段代码没有多大意义,在某些情况下会造成无限循环。
  • 第一个if 有效。它限制了else的范围。
  • @PM77-1 当然不是,但这不是重点。我实际上认为它可以在最后一个 else 语句中被否定,使其成为 else-if 语句,但我不确定。尝试查看程序集输出,但没有任何运气。

标签: optimization language-agnostic


【解决方案1】:

对于通用编译器,答案是否定的。

然而,两个密切相关的优化是Data flow optimizations,它旨在消除代码中的双重计算和不可能的路径。另一个是Currying,旨在针对特定参数优化通用功能。

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-11-09
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多