Глубина встраивания в компиляторе GCC

я это изучил

Спецификатор inline — это подсказка компилятору, что он должен попытаться сгенерировать [...] встроенный код вместо того, чтобы закладывать код для функции один раз, а затем вызывать его с помощью обычного механизма вызова функции.

Вопросы:

  1. Если оптимизация отключена для компилятора GCC, игнорируется ли встроенный спецификатор?
  2. Когда встроенные функции вызываются рекурсивно, какой параметр компилятора определяет «глубину встраивания», пока он не будет следовать обычному механизму вызова функций?
  3. Если встроенная функция вызывается внутри цикла for, возникает ли такая же «глубина встраивания»?

person nitin_cherian    schedule 24.06.2012    source источник


Ответы (2)


Если оптимизация отключена для компилятора GCC, игнорируется ли встроенный спецификатор?

Да, если оптимизация отключена в GCC, никакие функции не будут встроены. Это эквивалентно использованию флага -fno-inline во время компиляции. См. эту ссылку.

-fno-inline

Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

Когда встроенные функции вызываются рекурсивно, какой параметр компилятора определяет «глубину встраивания», пока он не будет следовать обычному механизму вызова функций?

Варианты max-inline-recursive-depth и max-inline-recursive-depth-auto. Глубина по умолчанию равна 8.

person Sanish Gopalakrishnan    schedule 24.06.2012

Помимо -fno-inline, вам также необходимо использовать -fno-default-inline для отключения встроенных функций в классах. Это полезно, когда вы используете gdb для входа в эти встроенные функции.

person lenx.wei    schedule 24.06.2012