При любом вызове функции добавляется небольшое количество машинных инструкций, в том числе больше для большего количества параметров, по сравнению с тем же кодом, присутствующим в строке, или компиляцией, рассматривающей функцию как встроенную.
Однако это ОЧЕНЬ небольшое количество машинных инструкций. Таким образом, в большинстве случаев вы можете легко сделать это для любого нетривиального размера, выбрав и реализовав более эффективный алгоритм.
Если вы действительно находитесь на BLAZING EDGE производительности (скорее всего, нет, если вы не работаете с драйверами устройств), тогда вы можете начать встраивать функции или переключаться на сборку.
Но в любом случае сначала напишите наиболее понятный код, а затем измерьте, прежде чем начинать беспокоиться о производительности. Таким образом у вас будет меньше ошибок и, следовательно, больше времени для оптимизации вашего правильно работающего кода.
Редактировать: если вы имеете в виду такие вещи, как анонимные функции, они вызывают снижение производительности, но, как всегда, измеряют сначала, оптимизируют вторым.