Разорвано с здесь :
Да и нет. Иногда. Может быть.
Простых ответов нет. встроенные функции могут сделать код быстрее, они могут сделать его медленнее. Они могут сделать исполняемый файл больше, они могут сделать его меньше. Они могут вызвать побои, они могут предотвратить побои. И они могут быть и зачастую совершенно не имеют отношения к скорости.
встроенные функции могут сделать его быстрее : как показано выше , процедурная интеграция может удалить кучу ненужных инструкций, что может ускорить работу.
встроенные функции могут замедлять работу : слишком большое встраивание может привести к раздуванию кода, что может вызвать «перебои» в системах виртуальной памяти с подкачкой. Другими словами, если размер исполняемого файла слишком велик, система может проводить большую часть своего времени, выходя на диск, чтобы получить следующий фрагмент кода.
встроенные функции могут сделать его больше : это понятие раздувания кода, как описано выше. Например, если система имеет 100 встроенных функций, каждая из которых расширяется до 100 байт исполняемого кода и вызывается в 100 местах, это увеличение на 1 МБ. Это 1 МБ будет вызывать проблемы? Кто знает, но возможно, что последние 1 МБ могут вызвать «зависание» системы, что может замедлить процесс.
встроенные функции могут сделать его меньше : компилятор часто генерирует больше кода для отправки / извлечения регистров / параметров, чем при встроенном расширении тела функции. Это происходит с очень маленькими функциями, а также с большими функциями, когда оптимизатор может удалить много избыточного кода посредством процедурной интеграции - то есть, когда оптимизатор может сделать большую функцию небольшой.
встроенные функции могут вызвать перебрасывание : встраивание может увеличить размер двоичного исполняемого файла, что может вызвать перебивание.
встроенные функции могут предотвратить сбои : размер рабочего набора (количество страниц, которое должно быть в памяти одновременно) может уменьшиться, даже если размер исполняемого файла увеличивается. Когда f () вызывает g (), код часто находится на двух разных страницах; когда компилятор процедурно интегрирует код функции g () в функцию f (), код часто находится на той же странице.
встроенные функции могут увеличить количество пропусков кеша : встраивание может привести к тому, что внутренний цикл охватит несколько строк кеша памяти, что может привести к перегрузке кеша памяти.
встроенные функции могут уменьшить количество пропусков кэша : встраивание обычно улучшает местность ссылок в двоичном коде, что может уменьшить количество строк кэша, необходимых для хранения кода внутреннего цикла. В конечном итоге это может привести к тому, что приложение, связанное с процессором, будет работать быстрее.
встроенные функции могут не иметь отношения к скорости : большинство систем не привязаны к процессору. Большинство систем привязаны к вводу / выводу, к базе данных или к сети, что означает, что узким местом в общей производительности системы является файловая система, база данных или сеть. Если ваш «измеритель ЦП» не установлен на 100%, встроенные функции, вероятно, не сделают вашу систему быстрее. (Даже в системах с привязкой к ЦП встроенный метод поможет только при использовании внутри самого узкого места, а узкое место обычно составляет лишь небольшой процент кода.)
Нет простых ответов : Вы должны поиграть с ним, чтобы увидеть, что лучше. Не соглашайтесь на упрощенные ответы, такие как «Никогда не используйте встроенные функции» или «Всегда используйте встроенные функции» или «Используйте встроенные функции, если и только если функция меньше N строк кода». Эти правила одного размера могут быть легко записаны, но они приведут к неоптимальным результатам.
Авторские права (C) Marshall Cline