ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
1308656 Топик полностью
Eddy_Em (11.05.2023 17:18, просмотров: 339) ответил POV на Нет там оберток. при flto инлайнит gcc нещадно. Внутри обертки обращение к одному регистру - значит только это обращение в код и будет помещено.
Не стоит забывать еще и об отсутствии культуры написания кода: я неоднократно встречал записи вида 
reg |= flag1;

reg &= mask1;

reg |= flag2; ...

Неужто написавший это не понимает, что будут тратиться лишние такты МК - ведь gcc не оптимизирует все это в один вызов из-за того, что регистры волатильные!

Дальше: если вызывать одну функцию из многих мест, а там больше, чем просто обращение к одному регистру, то даже с -flto gcc может решить, что эффективней будет таки функцию вызывать, а не инлайнить ее везде.

Ну, и что совсем бесит в этих калокубах/SPL'ях - так это вызов функций инициализации периферии с аргументом - указателем на огромную структуру, которую пользователь долго собирает отдельными обращениями к полям. Понятно, что компилятор все стерпит и эта структура будет в секции text целиком валяться, а функция будет поочередно нужные поля брать. Но ведь элементарно некрасиво выглядит. И читается ужасно.

Что до генерирования калокуберского кода, так вообще у меня подгорает, когда эту портянку вижу. А некоторые ведь не брезгуют и на форумах (да и том же SO) целиком всю сгенеренную портянку приводят - можно подумать, это что-нибудь полезное даст, если сам вопрошающий ни строчки кода не написал…

eddy-em.livejournal.com github.com/eddyem