Где должны функционировать атрибуты go? - PullRequest
4 голосов
/ 24 февраля 2020

Предположим, я хочу пометить не встроенную функцию [[gnu::cold]];, должен ли атрибут быть помещен в объявление в заголовке или go с определением в исходном файле? Предположим, что я не буду использовать LTO, а просто хочу, чтобы указанная функция c была оптимизирована для двоичного размера, а не для скорости выполнения.

Пример заголовка:

[[gnu::cold]] void rarely_called_func();

пример исходного файла:

[[gnu::cold]] void rarely_called_func() { ... }

Кроме того, какая позиция в объявлении / определении должна быть:

/* A */ int /* B */ func () /* C */;

1 Ответ

3 голосов
/ 24 февраля 2020

Если атрибут не виден компилятором, он не может использовать атрибут при оптимизации. Если вы не поместите атрибут в объявление, то компилятор не сможет увидеть атрибут. Вывод: чтобы компилятор использовал атрибут для оптимизации, необходимо поместить атрибут в объявление функции (в файле заголовка).

...