科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道GNUC扩展:Linux操作系统的内核使用 (6)

GNUC扩展:Linux操作系统的内核使用 (6)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

很多计算或操作在参数为常数时有更优化的实现,在 GNU C 中用上面的方法可以 根据参数是否为常数,只编译常数版本或非常数版本,这样既不失通用性,又能在 参数是常数时编译出最优化的代码。

作者:lenn 来源:chinaunix 2007年11月3日

关键字: 使用 内核 扩展 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

很多计算或操作在参数为常数时有更优化的实现,在 GNU C 中用上面的方法可以

根据参数是否为常数,只编译常数版本或非常数版本,这样既不失通用性,又能在

参数是常数时编译出最优化的代码。

* __builtin_expect(EXP, C)

内建函数 __builtin_expect 用于为编译器提供分支预测信息,其返回值是整数表

达式 EXP 的值,C 的值必须是编译时常数。例如:

++++ include/linux/compiler.h

13: #define likely(x) __builtin_expect((x),1)

14: #define unlikely(x) __builtin_expect((x),0)

++++ kernel/sched.c

564: if (unlikely(in_interrupt())) {

565: printk("Scheduling in interrupt\n");

566: BUG();

567: }

这个内建函数的语义是 EXP 的预期值是 C,编译器可以根据这个信息适当地重排

语句块的顺序,使程序在预期的情况下有更高的执行效率。上面的例子表示处于中

断上下文是很少发生的,第 565-566 行的目标码可能会放在较远的位置,以保证

经常执行的目标码更紧凑。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章