Прежде всего, я не ищу способ заставить компилятор встроить реализацию каждой функции.
Чтобы снизить уровень ошибочных ответов, убедитесь, что вы понимаете, что на самом деле означает ключевое слово inline
. Вот хорошее описание, встроенный против статического против внешнего .
Итак, мой вопрос, почему бы не отметить каждое определение функции inline
? т.е. в идеале единственной единицей компиляции будет main.cpp
. Или, возможно, еще несколько для функций, которые не могут быть определены в заголовочном файле (идиома pimpl и т. Д.).
Теория этого странного запроса заключается в том, что он даст оптимизатору максимум информации для работы. Конечно, он может включать встроенные реализации функций, но он также может выполнять «кросс-модульную» оптимизацию, поскольку существует только один модуль. Есть ли другие преимущества?
Кто-нибудь пробовал это с реальным приложением? Производительность увеличилась? уменьшить?!?
Каковы недостатки маркировки всех определений функций inline
?
- Компиляция может быть медленнее и занимать гораздо больше памяти.
- Итеративные сборки не работают, после каждого изменения нужно будет перестраивать все приложение.
- Время ссылки может быть астрономическим
Все эти недостатки влияют только на разработчика. Каковы недостатки времени выполнения?