Я некоторое время искал ответ на этот вопрос, и, если он уже существует, укажите мне правильное место.
Я занимаюсь оптимизацией отдельных функций в c, скомпилированных с помощью gcc.
Мне удалось оптимизировать одну функцию за пределами общей оптимизации файла, используя:
void __attribute__((optimize("Os"))) Func( void )
{
...
}
Но я не уверен в том, как обрабатывает gcc:
void __attribute__((optimize("Os"))) Func1( void )
{
...
}
void __attribute__((optimize("O3"))) Func2( void )
{
Func1();
...
}
, начиная с Func1 ()компилируется с -O, это не должно быть встроено, и я был вполне уверен, что я обнаружу, что в результате я получил результат, в котором все в Func2 () оптимизировано до -03, за исключением вызова Func1 (). Но результаты, которые я вижу, говорят об обратном. Это заставляет меня поверить, что я делаю что-то не так или неправильно понимаю реализацию gcc.
Применяется ли атрибут оптимизации -O3 в func2 () ко всему внутри Func2 (), который будет отдельно компилировать func1 () с -03 для использования вставки внутри вызова func2 ()?