【问题标题】:compiler optimization: will double checking a case cause removal?编译器优化:双重检查是否会导致删除?
【发布时间】:2013-11-20 22:04:24
【问题描述】:

当我在写一个 BST 查找函数时:

public static boolean find(Node root, int value){
    if(root == null){
        return false;
    }
    Node iter = root;

    while(iter != null){
    .....
    }
    return false;
}

编译器会删除

if(root == null){
   return false;
}

或者不。因为我无论如何都在 while 循环中检查条件。

谢谢。

ps。我刚刚意识到,我是按值传递的,所以不需要 iter Node.. 太多 C

【问题讨论】:

  • 这里明显的问题是:为什么要检查两次?
  • 我不应该检查两次(一次就足够了),只是想知道?

标签: java data-structures binary-search-tree compiler-optimization


【解决方案1】:

这取决于您的优化。如果您进行了全面优化并且编译器可以证明删除初始 if 不会改变函数的输出,那么是的,它可能会删除它。

在您提供的 exact 代码示例中,我敢肯定,如果不在,编译器确实可以优化第一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-21
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多