C++20 将属性[[likely]]
和语言引入[[unlikely]]
了语言,可用于允许编译器针对一个执行路径比其他执行路径更可能或不太可能的情况进行优化。
考虑到不正确的分支预测的代价,这似乎是一个在性能关键的代码部分中可能非常有用的功能,但我不知道它实际上会导致编译器做什么。
是否有一段简单的代码可以添加[[likely]]
和[[unlikely]]
属性更改编译器的程序集输出?也许更重要的是,这些变化有什么作用?
我创建了一个简单的示例以供自己理解,以查看程序集是否有任何差异,但似乎此示例过于简单,无法实际显示程序集的任何更改:
void true_path();
void false_path();
void foo(int i) {
if(i) {
true_path();
} else {
false_path();
}
}
void bar(int i) {
if(i) [[likely]] {
true_path();
} else [[unlikely]] {
false_path();
}
}