Что не так с использованием встроенных функций? - PullRequest
35 голосов
/ 14 сентября 2008

Хотя в некоторых ситуациях было бы очень удобно использовать встроенные функции,

Есть ли недостатки с встроенными функциями?

Заключение

Видимо, в использовании встроенных функций нет ничего плохого.

Но стоит отметить следующие моменты!

  • Чрезмерное использование встраивания может замедлить работу программ. В зависимости от размера функции, ее вставка может привести к увеличению или уменьшению размера кода. Встраивание очень маленькой функции доступа обычно уменьшает размер кода, тогда как встраивание очень большой функции может значительно увеличить размер кода. На современных процессорах меньший код обычно выполняется быстрее благодаря лучшему использованию кэша команд. - Правила Google

  • Преимущества встроенных функций в скорости уменьшаются по мере увеличения размера функции. В какой-то момент накладные расходы на вызов функции становятся небольшими по сравнению с выполнением тела функции, и выгода теряется - Источник

  • Есть несколько ситуаций, когда встроенная функция может не работать:

    • Для функции, возвращающей значения; если существует оператор возврата.
    • Для функции, не возвращающей никаких значений; если существует оператор loop, switch или goto.
    • Если функция рекурсивная. -source
  • Ключевое слово __inline вызывает функцию, которая будет встроена, только если вы укажете опцию оптимизации. Если указан параметр оптимизации, будет ли учитываться __inline, зависит от настройки параметра встроенного оптимизатора. По умолчанию встроенный параметр действует при каждом запуске оптимизатора. Если вы укажете оптимизировать, вы также должны указать опцию noinline, если хотите, чтобы ключевое слово __inline игнорировалось. -source

Ответы [ 12 ]

0 голосов
/ 24 июля 2016
  1. Как и другие люди говорили, что встроенная функция может создать проблему, если код большой. Поскольку каждая инструкция хранится в определенном месте в памяти, перегрузка встроенной функции заставляет код занимать больше времени, чтобы его исключили .

  2. Есть несколько других ситуаций, когда inline может не работать

    1. не работает в случае рекурсивной функции.
    2. Может также не работать со статической переменной.
    3. это также не работает в случае использования цикла, переключателя и т. Д., Или мы можем сказать, что с несколькими операторами.
    4. И функция main не может работать как встроенная функция.
0 голосов
/ 14 сентября 2008

Чрезмерное встраивание функций может увеличить размер скомпилированного исполняемого файла, что может отрицательно сказаться на производительности кэша, но в настоящее время компилятор сам принимает решение о встраивании функции (в зависимости от многих критериев) и игнорирует встроенное ключевое слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...