在 GCC 4.1.1 中优化文件中单个函数的方法是啥?

Posted

技术标签:

【中文标题】在 GCC 4.1.1 中优化文件中单个函数的方法是啥?【英文标题】:What is the method for optimizing individual functions in a file in GCC 4.1.1?在 GCC 4.1.1 中优化文件中单个函数的方法是什么? 【发布时间】:2009-05-07 21:09:51 【问题描述】:

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

例如:

代码勇士

#pragma optimization_level 0
void func_no_opt()

    // Some Work - not optimized


#pragma optimization_level 3
void func_full_opt()

    // Some Work - optimized

MSVC

#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)中有没有办法做类似于这些其他编译器的事情?不幸的是,我的目标平台(专有硬件)不支持 GCC 4.4,所以我不能使用优化属性——即__attribute__((optimize(...)))

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

【问题讨论】:

【参考方案1】:

看起来__attribute__((optimize(...))) 是在 GCC 中控制按功能优化的唯一方法。因此,在 GCC 4.1.1 中分离出一个单独的函数库进行优化确实是您唯一的选择。

【讨论】:

Ugghh .. 我希望有一个更简单的方法。我想我只能受苦,直到他们开始支持 GCC 4.4 :-(【参考方案2】:

从 GCC 4.4 开始,您可以使用优化编译指示,详见 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

【讨论】:

我注意到,在类方法中,此选项仅在#pragma 位于类声明(.h 文件)中时才有效。它对方法定义(.cpp 文件)没有影响。

以上是关于在 GCC 4.1.1 中优化文件中单个函数的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gcc 中启用单个优化标志?

可以跨 C 和 C++ 方法优化 gcc 或 clang 的 LTO

如何告诉 gcc 不要内联函数?

让 SCons 在一条 gcc 行中编译所有内容?

GCC 优化对位操作的有效性

GCC 可以使用编译时常量变量优化类的方法吗?