【发布时间】:2011-07-31 14:38:42
【问题描述】:
我正在开发一个依赖编译器优化的项目,但我需要一些不被 GCC 优化的代码。这可能吗?
【问题讨论】:
标签: optimization gcc
我正在开发一个依赖编译器优化的项目,但我需要一些不被 GCC 优化的代码。这可能吗?
【问题讨论】:
标签: optimization gcc
您可以将那段代码放入不同的文件中,并在不进行优化的情况下对其进行编译。
或者尝试使用#pragma 指令:
#pragma optimize level=0
甚至更好地开始和停止优化:
#pragma OPTIMIZE ON
#pragma OPTIMIZE OFF
【讨论】:
__attribute__ 似乎可以工作。
GCC 从 4.4 开始。 #pragma GCC optimize ("whatever")。我还建议使用#pragma GCC push_options 和#pragma GCC pop_options 包装带有此编译指示的特定代码。第一个将保存更改之前的选项,稍后将恢复它们,其余代码将使用 global 选项进行编译。
有关 whatever 字符串的详细信息,您应该查看 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.。
这意味着如果您不想对特定代码进行任何优化,您的 whatever 应该只是“0”。
【讨论】:
#pragma GCC。
GCC 4.4 有一个属性:
int foo(int i) __attribute__((optimize("-O3")));
【讨论】: