• 慢慢学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))
    {}

      

      

  • 相关阅读:
    Chrome 使用 Evernote 插件
    【MySQL】ON DUPLICATE KEY UPDATE
    【MySQL】Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and ...
    libevent API
    LLServer--》对LevelDB的应用
    Linux信号signal处理机制
    守护进程
    使用 libevent 和 libev 提高网络应用性能(IBM)
    Libev和LibEvent
    利用TokyoTyrant构建兼容Memcached协议、支持故障转移、高并发的分布式Key-value持久存储系统(转)
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2385768.html
Copyright © 2020-2023  润新知