3

各种 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(...))).

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

4

2 回答 2

4

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

于 2009-05-07T21:34:42.057 回答
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
于 2013-07-08T11:29:05.490 回答