我正在向一个库中添加一个函数,该函数有望被调用数百万次。什么是最有效的方法来检查函数是否传递一个NULL指针并退出,如果它是,并继续,如果没有给出预期传递的指针将在大多数时间是非NULL。任何指针都会受到欢迎......
由于
答案 0 :(得分:0)
GNU C编译器有一个__builtin_expect
来告诉优化器一个值最可能的结果。
虽然它不是标准的C.
您可以#define
宏来包装它并根据编译器有条件地切换要使用的定义。
Linux内核以这种方式使用它(include / linux / compiler.h):
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
ifs
然后成为:
if (likely(an_expression)) { ... }
if (unlikely(another_expression)) { ... }