有没有办法告诉GCC不优化特定的代码?

时间:2011-04-07 11:13:48

标签: optimization gcc

我正在开发一个依赖于编译器优化的项目,但我需要一些不被GCC优化的代码。这可能吗?

3 个答案:

答案 0 :(得分:28)

GCC 4.4具有以下属性:

int foo(int i) __attribute__((optimize("-O3")));

记录于:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Function-Attributes.html#index-g_t_0040code_007boptimize_007d-function-attribute-3195

答案 1 :(得分:18)

GCC自4.4以来。 #pragma GCC optimize ("whatever")。我还建议用#pragma GCC push_options#pragma GCC pop_options包装特定代码,该代码使用此编译指示进行注释。第一个将保存更改之前的选项,之后将恢复它们,其余代码将使用全局选项进行编译。

有关任何字符串的详细信息,您应该查看gcc文档,这里是最重要的部分:Arguments can either be numbers or strings. Numbers are assumed to be an optimization level. Strings that begin with O are assumed to be an optimization option, while other options are assumed to be used with a -f prefix.

这意味着如果您不希望对特定代码进行任何优化,那么 应该只是“0”。

答案 2 :(得分:3)

您可以将该段代码放入不同的文件中并进行编译而不进行优化。

或尝试使用#pragma指令:

#pragma optimize level=0 

甚至可以通过以下方式更好地启动和停止优化:

#pragma OPTIMIZE ON 
#pragma OPTIMIZE OFF