Супер быстрый ответ: Да, может быть.
Быстрый ответ: Да, но, как правило, недостаточно, чтобы вы заботились, а иногда и вовсе.
Полный ответ: если все функции находятся в одном и том же модуле перевода, а компилятор не сосет, дополнительный уровень вызова функции просто оптимизируется, и будет ноль влияние на спектакль. В противном случае, если вы выполняете вызовы внешних функций, ожидайте небольшой, но ненулевой производительности. В большинстве случаев это не имеет значения, но для функций, которые являются сверхкороткими, когда важен каждый цикл, это может сделать вашу программу в два раза медленнее или хуже. Некоторые наихудшие примеры:
- Функция наподобие
getc
, которая просто извлекает следующий байт из буфера, продвигает позицию и возвращает (в общем случае, когда буфер не пуст).
- Функция, которая продвигает конечный автомат посредством тривиальной операции и возвращает, например, обработку одного байта символа UTF-8.
- Примитивы блокировки / синхронизации. Это особый случай, потому что фактический доступ к атомарной памяти должен доминировать во времени выполнения, что делает накладные расходы незначительными. Но если ваш предполагаемый вариант использования состоит в том, чтобы просто удерживать блокировки для одной тривиальной операции (например,
lock(); a++; unlock();
), то даже небольшое добавленное время с удерживаемой блокировкой может оказать радикальное влияние на производительность состязания, если блокировка интенсивно утверждается.
Наконец, ответ «что вам следует делать»: пишите код наиболее естественным образом, пока тестирование / измерение не покажут вам проблему с производительностью. Только тогда вы должны подумать об увеличении кода для повышения производительности.