Преимущества встроенных функций в C ++? - PullRequest
248 голосов
/ 28 сентября 2008

В чем преимущества / недостатки использования встроенных функций в C ++? Я вижу, что это только увеличивает производительность для кода, который выводит компилятор, но с современными оптимизированными компиляторами, быстрыми процессорами, огромной памятью и т. Д. (Не так, как в 1980 году <где памяти было мало и все должно было уместиться в 100 КБ памяти) преимущества у них сегодня есть? </p>

Ответы [ 14 ]

1 голос
/ 17 июня 2016

Наш профессор информатики призвал нас никогда не использовать inline в программе на c ++. Когда его спросили, почему, он любезно объяснил, что современные компиляторы должны определять, когда использовать inline автоматически.

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

1 голос
/ 28 февраля 2016

Почему бы не сделать все функции встроенными по умолчанию? Потому что это инженерный компромисс. Существует как минимум два типа «оптимизации»: ускорение программы и уменьшение размера (объема памяти) программы. Встраивание вообще ускоряет вещи. Это избавляет от накладных расходов на вызов функции, избегая выталкивания и извлечения параметров из стека. Однако это также увеличивает объем памяти программы, поскольку теперь каждый вызов функции должен заменяться полным кодом функции. Чтобы сделать вещи еще более сложными, помните, что ЦП хранит часто используемые куски памяти в кеше ЦП для сверхбыстрого доступа. Если вы сделаете образ памяти программы достаточно большим, ваша программа не сможет эффективно использовать кеш, а в худшем случае встраивание может замедлить вашу программу. В некоторой степени компилятор может рассчитать компромиссы и может принять более правильные решения, чем вы, просто взглянув на исходный код.

1 голос
/ 08 января 2014

Попал в ту же проблему с встраиванием функций в библиотеки так. Кажется, что встроенные функции не скомпилированы в библиотеку. в результате компоновщик выдает ошибку «неопределенная ссылка», если исполняемый файл хочет использовать встроенную функцию библиотеки. (случилось со мной при компиляции исходного кода Qt с помощью gcc 4.5.

0 голосов
/ 28 сентября 2008

Вывод из другого обсуждения здесь:

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

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

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

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

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

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

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

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