Я работаю над проектом, который полагается на оптимизацию компилятора, но мне нужен какой-то код, который не должен быть оптимизирован GCC. Возможно ли это?
Есть ли способ сказать GCC не оптимизировать определенный фрагмент кода?
Ответ 1
GCC имеет с 4.4. #pragma GCC optimize ("whatever")
. Я также рекомендовал бы обернуть конкретный код, который аннотируется с помощью этой прагмы с помощью #pragma GCC push_options
и #pragma GCC pop_options
. Первый сохранит параметры, как они были до вашего изменения, позже их потом восстановит, а остальная часть кода будет скомпилирована с глобальными параметрами.
Подробнее о любой строке, вы должны посмотреть в gcc doc, здесь самая важная ее часть: 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
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
Ответ 3
Вы можете поместить этот фрагмент кода в другой файл и скомпилировать его без оптимизаций.
Или попробуйте использовать директиву #pragma:
#pragma optimize level=0
Или даже лучше начать и остановить оптимизацию с помощью:
#pragma OPTIMIZE ON
#pragma OPTIMIZE OFF