结论
使用__builtin_expect优化程序性能,开启-O3的情况下,确实程序的体积可能不改变,但是还是会产生优化效果。
测试代码
不使用__builtin_expect
#include <iostream>void fun(int a, int b) {// 不使用__builtin_expectif (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_expectif (__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前后程序的大小是完全一样的。