Есть ли способ сказать 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
Другие вопросы по тегам