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