结论
使用__builtin_expect优化程序性能,开启-O3的情况下,确实程序的体积可能不改变,但是还是会产生优化效果。
测试代码
不使用__builtin_expect
#include <iostream>
void fun(int a, int b) {
// 不使用__builtin_expect
if (a < b) {
std::cout << "a < b" << std::endl;
} else {
std::cout << "a >= b" << std::endl;
}
}
int main() {
return 0;
}
使用__builtin_expect
#include <iostream>
void fun(int a, int b) {
// 使用__builtin_expect
if (__builtin_expect(a < b, 1)) {
std::cout << "a < b" << std::endl;
} else {
std::cout << "a >= b" << std::endl;
}
}
int main() {
return 0;
}
在Compiler Explorer 选择ARM64 gcc9.5 -O3优化
汇编指令对比
上图中主要汇编指令的顺序不一致
在ubuntu 20.04下使用 g++ -O3测试
发现使用使用__builtin_expect前后程序的大小是完全一样的。