Предположим, у меня есть блок компиляции, состоящий из трех функций: A, B и C. A вызывается один раз из функции, внешней по отношению к модулю компиляции (например, это точка входа или обратный вызов); B вызывается много раз A (например, он вызывается в замкнутом цикле); C вызывается один раз при каждом вызове B (например, это библиотечная функция).Семантика горячего атрибута GCC
Весь путь через A (проходящий через B и C) критичен с точки зрения производительности, хотя производительность самого A не является критичной (поскольку большинство времени проводится в B и C).
Каков минимальный набор функций, который следует комментировать с помощью __attribute__ ((hot))
, чтобы добиться более агрессивной оптимизации этого пути? Предположим, что мы не можем использовать -fprofile-generate
.
Эквивалентно: означает ли __attribute__ ((hot))
«оптимизировать тело этой функции», «оптимизировать вызовы для этой функции», «оптимизировать все вызовы потомков, которые выполняет эта функция», или их комбинация?
На странице информации GCC четко не рассматриваются эти вопросы.
'__attribute__ ((горячий))' может получить вас что-то, но вы можете получить лучшие результаты от первого создания как B, так и C 'static inline' и оптимизации с помощью' -O3'. – twalberg
Я предполагаю, что эти шаги уже сделаны. –