GCC оптимизирует соглашения о вызовах

Мне было интересно, что можно явно указать пользовательское соглашение о вызовах, но учитывая зрелость и количество оптимизаций, найденных в компиляторе, когда соглашение о вызовах не указано, могу ли я ожидать, что компилятор выберет лучший вариант для конкретной функции, например, если параметры немного, и примитив использует fastcall и так далее …

1

Решение

Это «соглашение» по причине. Все должны следовать соглашению, иначе вы не можете вызвать свою функцию из другого модуля.

Однако, если функция не видна, у GCC есть опции. Он может встроить функцию или вызвать ее так, как хочет. Он может даже разбить его на «горячие» и «холодные» части и указать путь к горячему коду. Обычно это происходит только при сборке с оптимизацией профиля.

Если вы хотите, чтобы GCC проводил подобные оптимизации, постарайтесь скрыть свои функции. Если вы создаете исполняемый файл, посмотрите на -fwhole-program. Если вы создаете библиотеки, посмотрите на -fvisibility = hidden. Также посмотрите в -flto.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector