Есть ли способ сказать GCC не оптимизировать конкретный кусок кода?
Я работаю над проектом, основанным на оптимизации компилятора, но мне нужен код, который не будет оптимизирован GCC. Это возможно?
3 ответа
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".
GCC 4.4 имеет атрибут для этого:
int foo(int i) __attribute__((optimize("-O3")));
Он задокументирован по адресу: https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Function-Attributes.html.
Вы можете поместить этот фрагмент кода в другой файл и скомпилировать его без оптимизации.
Или попробуйте использовать директиву #pragma:
#pragma optimize level=0
Или даже лучше начать и остановить оптимизацию с помощью:
#pragma OPTIMIZE ON
#pragma OPTIMIZE OFF