2016-11-17 2 views
0

Я рассматриваю между заголовком только против заголовка & исходный дизайн. Я не уверен, что источник заголовка & позволяет компилятору оптимизировать файлы объектов и через привязку? таких как оптимизация встраивания?Может ли компилятор C оптимизировать файл объекта?

+1

Компилятор видит только одну единицу перевода. Так что нет, это не так. Но линкер может. Читайте о LTO. Что бы это ни было: не делайте преждевременных оптимизаций! Запишите код поддерживаемого кода и не помещайте определения в заголовки (за исключением 'inline' функций, которые должны быть только короткими функциями). – Olaf

ответ

3

Файлы заголовков и исходные файлы обычно скомпилированы как единая единица перевода (поскольку заголовки включены в исходные файлы). Таким образом, это не будет проблемой (если у вас нет особой среды, где заголовки компилируются отдельно).

GCC поддерживает оптимизацию в разных единицах перевода. См. Link Time Optimization.

Смотрите документацию по -flto опциона подробности:

-flto [= п]

Эта опция запускает стандартную ссылку времени оптимизатор. При вызове с исходным кодом он генерирует GIMPLE (один из внутренних представлений GCC ) и записывает его в специальные секции ELF в объекте . Когда объектные файлы связаны друг с другом, все объекты считываются из этих секций ELF и создаются так, как если бы они были частью одной и той же единицы перевода. Для использования времени ссылки оптимизатор, -flto и параметры оптимизации должны быть указаны на времени компиляции и во время финальной ссылки. Рекомендуется, чтобы вы скомпилировали все файлы, участвующие в той же ссылке, с теми же параметрами , а также указали эти параметры во время ссылки.

+0

Не забудьте скомпилировать * и ссылку * с флагом '-flto' и некоторыми * * *. Как правило, 'make CC = 'gcc -flto -O2'' –

+0

, так почему' -flto' не является значением по умолчанию? Есть ли причина не делать этого? – w00d

+0

@ w00d Так же, как и большинство оптимизаций по умолчанию не включены: 1) это может быть дорогостоящим, 2) отладка может быть сложнее, 3) время от времени приводит к ошибкам (ошибки в оптимизаторе) и т. Д. И не пользователям это может понадобиться (или одна или несколько ранее заявленных причин, приемлемых для них). – usr

Смежные вопросы