Информация об изменениях

Сообщение Re: gcc inline от 10.11.2022 21:20

Изменено 11.11.2022 2:32 Zhendos

Re: gcc inline
Здравствуйте, maks1180, Вы писали:

M>объявляю функцию inline но gcc все равно делает её отдельно. Почему так ?


Вообще это обычное поведение всех современных компиляторов.
"inline" это только предложение компилятору рассмотреть функцию
как кандидата на "inline", в компиялторах обычно есть всякие эвристики
для определения стоит это делать или нет, от количества инструкций в теле
функции до того сколько раз в этой единице компиляции компилятор уже
делал inline.

И насколько я понимаю причина этого того что разработчики
слишком усердствуют с использованием этого ключевого слова в C++,
и если тупо "проинлайнить" все, то будут получаться огромные исполняемые
файлы, во время выполнения которых кэш инструкций все время будет
подсасывать данные из памяти, тем самым на порядок замедлив программу.

Ну и как во всех современных компиляторах в gcc есть __attribute__((always_inline))
Re: gcc inline
Здравствуйте, maks1180, Вы писали:

M>объявляю функцию inline но gcc все равно делает её отдельно. Почему так ?


Вообще это обычное поведение всех современных компиляторов.
"inline" это только предложение компилятору рассмотреть функцию
как кандидата на "inline", в компиялторах обычно есть всякие эвристики
для определения стоит это делать или нет, от количества инструкций в теле
функции до того сколько раз в этой единице компиляции компилятор уже
делал inline.

И насколько я понимаю причина этого то, что разработчики
слишком усердствуют с использованием этого ключевого слова в C++,
и если тупо "проинлайнить" все, то будут получаться огромные исполняемые
файлы, во время выполнения которых кэш инструкций все время будет
подсасывать данные из памяти, тем самым на порядок замедляя программу.

Ну и как во всех современных компиляторах в gcc есть способ заставить
компилятор сделать функцию встраиваемой, в gcc это "__attribute__((always_inline))".