zoukankan      html  css  js  c++  java
  • arm-linux-gcc中对“inline”的处理

       C++对于关键字“inline”的处理大家都知道,C++编译器对于内敛函数就是把它当做一个宏展开。这样可能会增加程序的代码量,却可以减少程序入栈和出栈的此处,从而影响程序的执行速度。但是,C语言中扩展了C++的这个关键字,不同的编译器对它的处理还不一样。ADS的C编译器对“inline”还不支持,而本文主要谈arm-linux-gcc对“inline”的处理。

      下边是对“arm-linux-gcc的C编译器对 inline处理”的测试。
    无关键字的程序inline的程序代码:

    static void wait(volatile unsigned long dly)
    {
        for(; dly > 0; dly--);
    }
    int main(void)
    {
     unsigned long i = 0;
     // LED1,LED2,LED3,LED4对应的4根引脚设为输出
     GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;

     while(1){
      wait(30000);
      GPBDAT = (~(i<<5));   // 根据i的值,点亮LED1,2,3,4
      if(++i == 16)
       i = 0;
     }
     return 0;
    }

    有关键字的程序inline:

    static inline void wait(volatile unsigned long dly)
    {
        for(; dly > 0; dly--);
    }
    int main(void)
    {
     unsigned long i = 0;
     
     // LED1,LED2,LED3,LED4对应的4根引脚设为输出
     GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;

      while(1){
      wait(30000);
      GPBDAT = (~(i<<5));   // 根据i的值,点亮LED1,2,3,4
      if(++i == 16)
       i = 0;
     }
     return 0;
    } 


     
    结论:我通过它们的反汇编代码比较看出,加inline的情况是“先链接的是main()函数,而wait()函数后链接”;而没加inline的情况是“wait()函数先链接,然后才是main()函数”。但是,我并没有看到加inline的wait()函数作为一个宏在main()函数中被展开,所以arm-linux-gcc的C编译器对“inline”的处理与C++编译器对“inline”的处理是不一样的。

       顺便插一段文字,关于入栈出栈的时间问题。还是这个程序代码,下边的代码编译后,wait()函数还是需要被main()函数调用,也就是说还是要入栈出栈。而当我在arm-linux-gcc后边加入优化选项时,有时就可以把wait()函数就当做一个宏展开,这时就不需要入栈出栈。我在实际观测流水灯时,发现当做宏处理时的程序相对于被调用的程序的执行速度是快很多的。                                                                                                                            由此,我认为编程时,对于速度要求高的场合,是可以多利用宏替换来代替函数调用。

     

  • 相关阅读:
    L2私有专用网 L3私有专用网 互通
    VPLS知识点
    Lab L2tpv3
    L2TP version 3(Layer 2 Tunnel Protocol)
    L2私有专用网 Interworking [IW] 的两种类型
    L2私有专用网 伪线缝补
    Option 2:End-to-End PW between Provider Edge Routers
    Option 1:专用电路互联伪线的 Inter-AS 实现
    ATOM实验
    100、拥塞控制原理听说过吗?101、如何区分流量控制和拥塞控制?
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3344561.html
Copyright © 2011-2022 走看看