Мне было интересно, можно ли явно указать пользовательское соглашение о вызове, но с учетом зрелости и количества оптимизаций, найденных в компиляторе, когда не указано соглашение о вызове, могу ли я ожидать, что компилятор будет выбирать лучший для конкретной функции, например, если параметров мало и примитивно использовать fastcall и т. д.Поддерживает ли GCC оптимизацию вызовов?
1
A
ответ
3
Это «соглашение» по какой-то причине. Все должны следовать соглашению или вы не можете назвать свою функцию из другого модуля.
Однако, если функция не видна, то GCC имеет опции. Он может встроить функцию или вызвать ее, но она хочет. Он может даже разбить его на «горячие» и «холодные» части и встроить путь к горячим кодам. Обычно это происходит только при построении с оптимизацией профиля.
Если вы хотите, чтобы GCC выполнял такие оптимизации, работайте над тем, чтобы скрыть ваши функции. Если вы создаете исполняемый файл в программе -fwhole-program. Если вы строите библиотеки, посмотрите на -fvisibility = hidden. Также загляните в -flto.
Смежные вопросы
- 1. Предотвращает ли JVM оптимизацию вызовов?
- 2. Развернуть оптимизацию компилятора gcc
- 3. Поддерживает ли gcc уникальные_блоки?
- 4. Выполняет ли PL/SQL оптимизацию хвостовых вызовов?
- 5. Поддерживает ли Scala оптимизацию хвостовой рекурсии?
- 6. Поддерживает ли VS оптимизацию литья одного типа?
- 7. Поддерживает ли gcc 4.3.4 unique_ptr?
- 8. Поддерживает ли .NET JIT оптимизацию вложенных операторов try/catch?
- 9. Поддерживает ли Java оптимизацию вызовов функций для ненужных логических сравнений во время выполнения?
- 10. Как отключить оптимизацию tailcall в gcc
- 11. Можно ли оптимизировать оптимизацию хвоста на GCC/Clang?
- 12. Как максимизировать оптимизацию с помощью gcc?
- 13. Почему scala не делает оптимизацию хвостовых вызовов?
- 14. Поддерживает ли OptaPlanner оптимизацию и ограничения непрерывных переменных?
- 15. Поддерживает ли gcc встроенный ассемблерный синтаксис?
- 16. Как проверить, поддерживает ли gcc -march = native?
- 17. Поддерживает ли Linux gcc функцию coreleft?
- 18. Поддерживает ли GCC несколько целевых архитектур?
- 19. Поддерживает ли GCC длинный длинный int?
- 20. Поддерживает ли GCC std :: tie только чтение?
- 21. Поддерживает ли поддержка GCC текущий диапазон стека?
- 22. Каким образом AMP HTML поддерживает оптимизацию изображений?
- 23. Выполняет ли Ruby оптимизацию звонков?
- 24. Почему никакие javascript-двигатели не поддерживают оптимизацию хвостовых вызовов?
- 25. Что бы jvm пришлось жертвовать, чтобы реализовать оптимизацию хвостовых вызовов?
- 26. Как предотвратить gcc-оптимизацию некоторых операторов в C?
- 27. делает clang/gcc оптимизацию функции очистки переменной пароля
- 28. Почему GCC и Clang не делают эту оптимизацию псевдонимов?
- 29. Как предотвратить оптимизацию функции
- 30. Выполняет ли оптимизатор Delphi оптимизацию?
Если функция не является 'static', то компилятор * должен * соответствовать стандарту стандартного вызова –
Если компилятор может видеть как сайт вызова, так и тело функции (для чего это необходимо для этого) мог бы просто вставить вызов в любом случае. –
@NiklasB. и компоновщик видит все сайты вызовов и * может * делать все, что захочет – Caleth