C语言中的likely和unlikely关键字如何具体影响程序分支预测的优化效果?

2026-04-12 09:560阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计695个文字,预计阅读时间需要3分钟。

C语言中的likely和unlikely关键字如何具体影响程序分支预测的优化效果?

目录- 什么是likely和unlikely- likely/unlikely的原理- likely/unlikely的适用条件- C++20中的likely/unlikely- likely和unlikely的意义- 既然我们是程序员,在明确的情况下,我们应该比较CPU和编译器

目录
  • 什么是likely和unlikely
  • likely/unlikely的原理
  • likely/unlikely的适用条件
  • C++20中的likely/unlikely

什么是likely和unlikely

既然程序是我们程序员所写,在一些明确的场景下,我们应该比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU, 提高分支预测的准确率,从而减少CPU流水线分支预测错误带来的性能损失呢?答案是可以!它便是likely和unlikely。在Linux内核代码中,这两个宏的应用比比皆是。下面是他们的定义:

#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)

likely,用于修饰if/else if分支,表示该分支的条件更有可能被满足。而unlikely与之相反
以下为示例。unlikely修饰argc > 0分支,表示该分支不太可能被满足。

阅读全文

本文共计695个文字,预计阅读时间需要3分钟。

C语言中的likely和unlikely关键字如何具体影响程序分支预测的优化效果?

目录- 什么是likely和unlikely- likely/unlikely的原理- likely/unlikely的适用条件- C++20中的likely/unlikely- likely和unlikely的意义- 既然我们是程序员,在明确的情况下,我们应该比较CPU和编译器

目录
  • 什么是likely和unlikely
  • likely/unlikely的原理
  • likely/unlikely的适用条件
  • C++20中的likely/unlikely

什么是likely和unlikely

既然程序是我们程序员所写,在一些明确的场景下,我们应该比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU, 提高分支预测的准确率,从而减少CPU流水线分支预测错误带来的性能损失呢?答案是可以!它便是likely和unlikely。在Linux内核代码中,这两个宏的应用比比皆是。下面是他们的定义:

#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)

likely,用于修饰if/else if分支,表示该分支的条件更有可能被满足。而unlikely与之相反
以下为示例。unlikely修饰argc > 0分支,表示该分支不太可能被满足。

阅读全文