在 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++ 编译器都有#pragma
s 来控制优化。
例如:
代码勇士
#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 中优化文件中单个函数的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章