one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 (изменено) · Жалоба 1 hour ago, haker_fox said: Обычно у меня такое всегда прокатывает, если тело функции расположить в хидере Оно и должно быть в header'e, ODR требует, чтобы тело функции было видно везде, где используется "инлайнуемый" (о какой термин выдумал!) 32 minutes ago, Arlleex said: Почему только разработчики компиляторов не хотят сделать прагму __attribute__((boss_sredi_inline)), чтобы 100% инлайнил... Гадство Потому что этим занимается оптимизатор, к нему приходит уже скомпилированный код, а 100%, это означает - "инлайнить даже когда это невозможно", но оптимизатор не должен ломать работоспособность программы. А "инлайнить всегда, когда это возможно", - такиой ключ вам выше привёл @Forger: 2 hours ago, Forger said: можно усилить эффект, добавив еще и __attribute__((always_inline)) на примере ARM компилятора (у GCC вроде также). Изменено 15 октября, 2021 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 3 минуты назад, one_eight_seven сказал: А "инлайнить всегда, когда это возможно"... Тем не менее, это не гарантирует встраивание (см. функцию AtonicOr() у @jcxz). Сегодня компилятор + оптимизатор сделали все чистенько. Проект растет, и на каком-то релизе *хлоп* и сплошные BL на максимальной оптимизации... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 (изменено) · Жалоба 2 minutes ago, Arlleex said: Тем не менее, это не гарантирует встраивание (см. функцию AtonicOr() у @jcxz). Одна функция, в отрыве от всего проекта, включая опции компиляции, ничего не показывает. (В общем-то, это то же самое, что вы сказали во втором сообщении). P.S. Можете посмотреть здесь. Поиск по слову "inline", и чтение результатов - даёт некотрое понимание. Например, что мало слова "inline", нужно ещё и сам механизм инлайна включить. Не вставил ссылку: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html Изменено 15 октября, 2021 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба В Keil тоже отдельно включается Ну все равно вот представьте, как бы хорошо жилось, если бы было "жесточайшее" требование тулчейну - инлайнить! Типа под ответственность программиста. А программист, не будь дураком, такие "спичечные" конструкции а-ля переменную записать/считать, как раз этим "жестким" инлайном и задекларирует... В любом случае, ИМХО, чего бы там не наплел оптимизатор, самым оптимальным для таких конструкций будет жесткое встраивание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
antis 1 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 1 час назад, Forger сказал: Нет, по опыту это совсем не так. Нет никакого значения для компилятора где объявлена и где реализована функция Опыт это одно, а стандарт говорит, что это одно и тоже class A { void func() { // some code } }; class A { inline void func(); }; inline void A::func() { // some code } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 (изменено) · Жалоба 8 minutes ago, antis said: Опыт это одно, а стандарт говорит, что это одно и тоже Такие заявления неплохо бы подверждать ссылками. https://en.cppreference.com/w/cpp/language/inline Изменено 15 октября, 2021 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 6 минут назад, one_eight_seven сказал: Такие заявления неплохо бы подверждать ссылками. Ну, тот который первый в гугле открылся (с. 135) Цитата 3 A function defined within a class definition is an inline function. The inline specifier shall not appear on a block scope function declaration. If the inline specifier is used in a friend declaration, that declaration shall be a definition or the function shall have previously been declared inline. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 17 minutes ago, antis said: Опыт это одно, а стандарт говорит, что это одно и тоже В таком случае реализация функции внутри класса = inline, который как известно далеко не гарантирует inline по факту, короче, на то воля божья компилятора Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 7 minutes ago, Arlleex said: Ну, тот который первый в гугле открылся (с. 135) Видимо, вы отвечали, пока я ссылку вставлял. У меня сегодня с этим какие-то проблемы. 1 minute ago, Forger said: В таком случае реализация функции внутри класса = inline, который как известно далеко не гарантирует inline по факту, короче, на то воля божья компилятора Да. Именно так. На самом деле, такая функция не может быть неинлайновой, потому что иначе будет ругань на множественное определение и ошибка компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 1 час назад, Arlleex сказал: Почему только разработчики компиляторов не хотят сделать прагму __attribute__((boss_sredi_inline)), чтобы 100% инлайнил... Гадство И подобную обратную. Голосуем за петицию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 (изменено) · Жалоба 3 minutes ago, jcxz said: И подобную обратную а с -fno-inline что не так? А, понял, так же 100% хочется. Ну да, было бы полезно. Изменено 15 октября, 2021 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 2 минуты назад, one_eight_seven сказал: а с -fno-inline что не так? Это GCC? У меня IAR. И я про модификатор конкретных функций, а не ключ компилятору на всё подряд. Да, в IAR есть: #pragma inline=never, но нет полной уверенности, что всегда сработает и компилятор не решит, что он умнее.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 5 minutes ago, one_eight_seven said: Именно так. На самом деле, такая функция не может быть неинлайновой, потому что иначе будет ругань на множественное определение и ошибка компиляции. А вот это уже додумывание ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба 1 minute ago, Forger said: А вот это уже додумывание ) Я выше привёл ссылку на стандарт. Там это написано английским по белому. 2 minutes ago, jcxz said: Это GCC? У меня IAR. И я про модификатор конкретных функций, а не ключ компилятору на всё подряд. Да, это GCC. Причём, эта опция имеет меньший приоритет, чем атрибут always_inline. Есть опция noinline, которая исключает функцию из рассматриваемых для инлайна, но это опять же, может быть проигнорировано при оптимизации, и если нет побочных эффектов, оптимизатор всё равно может её заинлайнить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба "Инлайн этот - странный предмет... Вроде бы есть, а вроде и нет" Интересно еще другое: в изобилии всех этих inline и его дендрофекальных помощников в лице noinline, always_inline (который то же самое, что force_inline, который то же самое, что inline), которые вроде как есть, но ничего не гарантируют, и их отсутствие тоже ничего не гарантирует... То зачем они вообще нужны? Напоминает электромашинку для детей до 2 лет - вроде ребенок думает типа сам едет, а на самом деле родители с пульта газуют Так и программист с тулчейном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться