Страницы

Поиск по вопросам

вторник, 26 февраля 2019 г.

спецификаторы inline __inline __forceinline

Есть ли отличия в скорости работы кода, если например использовать спецификатор в методе класса?


Ответ

Есть, иногда.
inline не имеет никакого отношения к встраиванию функций, все компиляторы ее игнорируют. По этому единственное практическое применение inline - это использовать ее для функций, определенных в заголовочных файлах:
// header.hpp inline void f() { // несколько экранов кода }
Такая функция f возможно никогда не будет заинлайнена, но без inline ее нельзя разместить в заголовочном файле.
__inline, __forceinline, и другие расширения компилятора уже могут как-то влиять на то, будет функция заинлайнена или нет. Однако в общем случае встраивание функции не приводит к увеличению производительности. После встраивания функции, производительность может как увеличиться (убрали вызов функции), так и уменьшиться - цикл может стать большим, и перестанут работать предсказания в процессоре (prefetch и т.п.).
По этому __inline и __forceinline следует применять совместно с бенчмарками, использованием профилировщика, и просмотром сгенерированного ассемблерного кода. Использование этих ключевых слов вслепую не дает никакого эффекта.

Комментариев нет:

Отправить комментарий