c - 在 C if-else 语句中,应该先出现更可能为真的条件吗?

标签 c performance compiler-construction

我碰巧写了一个 if-else 语句,条件大多数时候都是假的(检查是否分配了静态指针)。哪个更适合编译器优化?或者他们只是平等的?该函数会被调用很多次,因此优化其性能至关重要。

void foo() {
  static int * p = NULL;
  if (p == NULL) {
     p = (int *) malloc( SIZE * sizeof(int)); 
  }
  //do something here
} 

void foo() {
  static int * p = NULL;
  if (p != NULL) {
    //do something here 
  } else {
    p = (int *) malloc( SIZE * sizeof(int));  
    //do something
  }
}

最佳答案

一些编译器可以允许开发人员指定哪种情况更有可能发生或不太可能发生。 这在 Linux 内核中被大量使用。

在 gcc 中,有 likely(x) 或 unlikely(x) 宏。 示例:

if (unlikely(p == NULL)) {
    p = malloc(10);
}

关于c - 在 C if-else 语句中,应该先出现更可能为真的条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20324940/

相关文章:

c - 单向链表中 Head 和 tail 指针保持相同的值

c - libdecnumber 中 decNumberCopy() 的不同大小结构?

linker - 最终的可执行文件是否使用符号表来检查变量范围

java - 使用 JavaFileManager 编译项目

c++ - 我可以要求 VC++ 链接器忽略未解析的外部吗?

java - 从 JNI 代码检查 Java 类中是否存在可选字段或方法

c++ - 通过 CreateProcessW 使用 "mkdir"创建的目录名称中的垃圾?

performance - 如何持续占用80%的CPU?

ruby-on-rails - 在 Rails 中,是否使用表单助手?

sql - 从 PL/SQL 插入到临时表 GTT 非常慢