__builtin_expect(EXP, N)。意思是:EXP==N的概率很大
這個(gè)指令是gcc引入的,作用是"允許程序員將最有可能執(zhí)行的分支告訴編譯器";
GCD中
#define fastpath(x) ((typeof(x))__builtin_expect((long)(x), ~0l))
#define slowpath(x) ((typeof(x))__builtin_expect((long)(x), 0l))
fastpath說(shuō)明條件很可能為真;
slowpath說(shuō)明條件很可能為假;
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
likely說(shuō)明條件很可能為真;
unlikely說(shuō)明條件很可能為假;
CPU會(huì)根據(jù)__builtin_expect指令優(yōu)化,盡最大可能的減少跳轉(zhuǎn)指令的發(fā)生。