Как gcc обрабатывает две функции с разными оптимизациями, когда одна вызывает другую? - PullRequest
0 голосов
/ 22 октября 2019

Я некоторое время искал ответ на этот вопрос, и, если он уже существует, укажите мне правильное место.

Я занимаюсь оптимизацией отдельных функций в 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 ()?

...