builtin-expect
开始yy错了, 在glibc里
void * __libc_malloc (size_t bytes)
{
mstate ar_ptr;
void *victim;
void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook);
if (__builtin_expect (hook != NULL, 0))
return (*hook)(bytes, RETURN_ADDRESS (0));
....
}
我开始以为这个if里的东西是和builtin_expect
的第二个参数有关系
但查找后发现是
__builtin_expect(long EXP, long C)
是返回EXP
的,不是返回EXP
和C
比较结果
这个函数是说EXP == C
的可能性比EXP != C
的可能性大, 然后编译器可以通过这个对代码进行优化之类的操作
只是我们预测EXP
就是C
就比如上面代码中
if(__builtin_expect(hook != NULL, 0))
等效为…就只是看__builtin_expect
第一个参数
if(hook != NULL)
而只是更可能有
(hook != NULL) == 0
// 就是hook通常是NULL, 编译器就可以通过这一点来优化代码
还有就是hexo这里,如果标题里有俩斜杠,就看造成代码高亮有问题…