Я рассматриваю между заголовком только против заголовка & исходный дизайн. Я не уверен, что источник заголовка & позволяет компилятору оптимизировать файлы объектов и через привязку? таких как оптимизация встраивания?Может ли компилятор C оптимизировать файл объекта?
ответ
Файлы заголовков и исходные файлы обычно скомпилированы как единая единица перевода (поскольку заголовки включены в исходные файлы). Таким образом, это не будет проблемой (если у вас нет особой среды, где заголовки компилируются отдельно).
GCC поддерживает оптимизацию в разных единицах перевода. См. Link Time Optimization.
Смотрите документацию по -flto
опциона подробности:
-flto [= п]
Эта опция запускает стандартную ссылку времени оптимизатор. При вызове с исходным кодом он генерирует GIMPLE (один из внутренних представлений GCC ) и записывает его в специальные секции ELF в объекте . Когда объектные файлы связаны друг с другом, все объекты считываются из этих секций ELF и создаются так, как если бы они были частью одной и той же единицы перевода. Для использования времени ссылки оптимизатор, -flto и параметры оптимизации должны быть указаны на времени компиляции и во время финальной ссылки. Рекомендуется, чтобы вы скомпилировали все файлы, участвующие в той же ссылке, с теми же параметрами , а также указали эти параметры во время ссылки.
Не забудьте скомпилировать * и ссылку * с флагом '-flto' и некоторыми * * *. Как правило, 'make CC = 'gcc -flto -O2'' –
, так почему' -flto' не является значением по умолчанию? Есть ли причина не делать этого? – w00d
@ w00d Так же, как и большинство оптимизаций по умолчанию не включены: 1) это может быть дорогостоящим, 2) отладка может быть сложнее, 3) время от времени приводит к ошибкам (ошибки в оптимизаторе) и т. Д. И не пользователям это может понадобиться (или одна или несколько ранее заявленных причин, приемлемых для них). – usr
- 1. Может ли компилятор оптимизировать код спагетти?
- 2. Может ли компилятор оптимизировать вызов метода?
- 3. Может ли компилятор java оптимизировать этот код?
- 4. Scala: может ли компилятор эффективно оптимизировать константы?
- 5. Может ли компилятор оптимизировать создание ссылок?
- 6. Может ли современный компилятор оптимизировать «ложные» пути?
- 7. C++: Может ли компилятор оптимизировать этот сегмент кода?
- 8. Будет ли хороший компилятор C++ оптимизировать ссылку?
- 9. Может ли компилятор F # оптимизировать эти взаимно рекурсивные функции?
- 10. Почему компилятор не может оптимизировать этот код?
- 11. Будет ли компилятор C/C++ оптимизировать этот оператор if?
- 12. ли компилятор оптимизировать и повторно использовать переменные
- 13. может ли компилятор оптимизировать на основе утверждений (...) выражений/контрактов?
- 14. BigDecimal: Может ли компилятор Java оптимизировать умножение на 1?
- 15. Может ли компилятор оптимизировать функцию преамбулы в сборке?
- 16. Может ли компилятор оптимизировать несколько одинаковых вызовов функций?
- 17. Будет ли компилятор оптимизировать инициализацию коллекций?
- 18. C++ компилятор не может найти файл
- 19. Является ли компилятор C# достаточно умным, чтобы оптимизировать этот код?
- 20. Может ли VS2010 C++/C# компилятор оптимизировать пропущенные переменные, объявленные внутри цикла?
- 21. Будет ли современный компилятор автоматически оптимизировать следующий код на C++?
- 22. Будет ли компилятор C++ оптимизировать неиспользуемое возвращаемое значение?
- 23. Будет ли компилятор C# оптимизировать пустой, если блоки
- 24. Будет ли компилятор C++ оптимизировать код возвращаемого значения?
- 25. Будет ли компилятор C# оптимизировать мои показатели удобочитаемости кода?
- 26. Будет ли компилятор C# оптимизировать вызовы одного метода внутри цикла?
- 27. Будет ли компилятор C# или Jitter оптимизировать эти арифметические операции?
- 28. Будет ли компилятор C# оптимизировать эту операцию внутри цикла?
- 29. Будет ли компилятор оптимизировать деление на умножение
- 30. Будет ли компилятор оптимизировать повторяющиеся математические вычисления?
Компилятор видит только одну единицу перевода. Так что нет, это не так. Но линкер может. Читайте о LTO. Что бы это ни было: не делайте преждевременных оптимизаций! Запишите код поддерживаемого кода и не помещайте определения в заголовки (за исключением 'inline' функций, которые должны быть только короткими функциями). – Olaf