Страницы

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

суббота, 4 января 2020 г.

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

#cpp


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


Ответы

Ответ 1



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

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

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