Есть ли способ сказать GCC не оптимизировать конкретный кусок кода? - PullRequest
23 голосов
/ 07 апреля 2011

Я работаю над проектом, основанным на оптимизации компилятора, но мне нужен код, который не будет оптимизирован GCC. Возможно ли это?

Ответы [ 3 ]

28 голосов
/ 07 апреля 2011

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

18 голосов
/ 07 апреля 2011

GCC имеет с 4.4. #pragma GCC optimize ("whatever"). Я также рекомендовал бы обернуть конкретный код, который отмечен этой прагмой с #pragma GCC push_options и #pragma GCC pop_options. Первый сохранит параметры такими, какими они были до вашего изменения, затем восстановит их позже, а остальная часть кода будет скомпилирована с параметрами global .

Для получения подробной информации о любой строке , вы должны заглянуть в документ 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".

3 голосов
/ 07 апреля 2011

Вы можете поместить этот кусок кода в другой файл и скомпилировать его без оптимизации.

Или попробуйте использовать директиву #pragma:

#pragma optimize level=0 

Или даже лучше запустить и остановитьоптимизация с:

#pragma OPTIMIZE ON 
#pragma OPTIMIZE OFF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...