zoukankan      html  css  js  c++  java
  • 慢慢学Linux驱动开发,第十章,GNU C的扩展

      内核开发者使用的C语言涵盖了ISO C99标准和GNU C扩展特性。这里简单介绍一下GNU C的扩展特性。

      1.内联(inline)函数

      GNU的C编译器支持内联函数,也是C++的一个特性之一。就是函数会在所调用的位置上展开,这样做虽然会导致代码量的增加,会占用更多的内存空间或者占用更多的指令缓存,但是确可以消除函数调用和返回所带来的开销,对于那些代码量少又需要经常调用的函数来说还是必须的。所以很显然对于一个很长的程序是不建议定义为内联函数的。

      定义一个内联函数的时候,需要使用static作为关键字,并且用inline限定它:

      static inline void Set_Bit(UINT8 res);

      内联函数必须在使用之前就定义好,否则编译器就没法把这个函数展开。实践中一般在头文件中定义内联函数。由于使用了static作为关键字进行限制,所以编译时不会为内联函数单独建立一个函数体。

      因为宏定义不具有类型检查的优点,所以建议优先使用内联函数而不是复杂的宏。

      2.内联汇编

      GCC编译器支持在C函数中嵌入汇编指令。注意体系结构的不同,汇编不具有移植性。

      3.分支声明

      对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely():

      /*foo几乎不出现*/
      if(unlikely(foo))
      {}
    /*foo经常出现*/
    if(likely(foo))
    {}

      

      

  • 相关阅读:
    python设计模式
    tomcat在ubuntu下的配置
    排序算法
    python爬虫(一)
    python实现推荐系统(二)
    python实现k近邻
    python实现逻辑回归
    python实现推荐系统(一)
    SGD实现推荐系统
    pyqt4+chatterbot实现简单聊天机器人程序
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2385768.html
Copyright © 2011-2022 走看看