Сообщение 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))
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))".
M>объявляю функцию inline но gcc все равно делает её отдельно. Почему так ?
Вообще это обычное поведение всех современных компиляторов.
"inline" это только предложение компилятору рассмотреть функцию
как кандидата на "inline", в компиялторах обычно есть всякие эвристики
для определения стоит это делать или нет, от количества инструкций в теле
функции до того сколько раз в этой единице компиляции компилятор уже
делал inline.
И насколько я понимаю причина этого то, что разработчики
слишком усердствуют с использованием этого ключевого слова в C++,
и если тупо "проинлайнить" все, то будут получаться огромные исполняемые
файлы, во время выполнения которых кэш инструкций все время будет
подсасывать данные из памяти, тем самым на порядок замедляя программу.
Ну и как во всех современных компиляторах в gcc есть способ заставить
компилятор сделать функцию встраиваемой, в gcc это "__attribute__((always_inline))".