代码之家  ›  专栏  ›  技术社区  ›  Adisak

GCC4.1.1中优化文件中单个函数的方法是什么?

  •  3
  • Adisak  · 技术社区  · 17 年前

    各种C/C++编译器都有 #pragma 控制优化。

    例如:

    代码战士

    #pragma optimization_level 0
    void func_no_opt()
    {
        // Some Work - not optimized
    }
    
    #pragma optimization_level 3
    void func_full_opt()
    {
        // Some Work - optimized
    }
    

    #pragma optimize("g", off)
    void func_no_opt()
    {
        // Some Work - not optimized
    }
    
    #pragma optimize("g", on)
    void func_full_opt()
    {
        // Some Work - optimized
    }
    
    #pragma optimize("", on)
    void func_default_opt()
    {
        // Some Work - default optimizations
    }
    

    出于纯粹的性能原因,我有两个函数需要在所有构建中进行优化,包括没有优化的调试构建。

    在GCC(特别是4.1.1)中有没有一种方法可以做一些类似于其他编译器的事情?不幸的是,gcc4.4在我的目标平台(专有硬件)上不受支持,所以我不能使用optimize属性。 __attribute__((optimize(...)))

    此外,在这个目标平台的工具链上,有一个自动批量构建工具;因此,也不可能只将函数拆分为单独的文件并更改优化参数,因为项目中的文件可以自动组合以提高编译和链接速度。我必须为这些函数创建一个单独的库,并将其链接起来,以便执行分离方法。这可能比它的价值要痛苦得多——特别是如果有一种更简单的方法来实现这一点的话。

    2 回复  |  直到 17 年前
        1
  •  4
  •   Laurynas Biveinis    17 年前

    看起来像是 __attribute__((optimize(...))) 是GCC中控制每个函数基优化的唯一方法。因此,使用GCC4.1.1分离出一个单独的函数库来进行优化确实是您唯一的选择。

        2
  •  2
  •   Riot    13 年前

    使用GCC4.4以上版本,可以使用优化pragmas,如中所述 http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas

    #pragma GCC push_options
    #pragma GCC optimize ("-O0")
    int foo() {
      return bar;
    }
    #pragma GCC pop_options