我碰巧写了一个 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/