andrewsch
@andrewsch

Увеличение размера библиотеки при компиляции всех исходников одним файлом?

Решил провести эксперимент — объединить все исходники в библиотеке в один файл и собрать библиотеку из него. По идее, должно значительно ускорить компиляцию и, теоретически, улучшить работу оптимизатора.


Взял пару библиотек (порядка 20-40 исходников в каждой), и собрал по-старому и по-новому.


Среда: Linux (RHEL), g++ 3.4.6


Время компиляции ускорилось и не ускорилось одновременно :-)

Значительно — примерно в 4 раза уменьшилось время затраченного CPU.

При этом, так как билд очень хорошо паралелит компиляцию исходников (на машине 4 ядра), то разница в затраченном времени (по часам) была невелика. Реальное время компиляции уменьшилось всего процентов на 10.

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


Теперь о размере получаемой библиотеки — я ожидал, что он уменьшится — там же должно быть раздолье для оптимизации. На деле библиотека вырастала на 10% если сборка велась из одного здорового исходника. И вот это-то мне и не понятно… Я-то думал она меньше станет…

При этом, если взять только объектные файлы, то как раз их объем сильно в размере уменьшается — один большой объектный файл занимает в 1.5-2 раза меньше, чем суммарно маленькие — это как раз ожидаемо.


Вопрос: чем может быть вызвано увеличение размера библиотеки?

И чем можно в библиотеку потыкать, чтобы понять, откуда размер? (nm, objdump, etc.?)


У меня пока единственное подозрение на «более эффективный» inline… или, может, что-то с шаблонами?..


С уважением,


Андрей
  • Вопрос задан
  • 2702 просмотра
Пригласить эксперта
Ответы на вопрос 2
Monnoroch
@Monnoroch
Вероятнее всего компилятор просто проинлайнил все что можно, и код таким образом получился толще.
Ответ написан
Комментировать
@zuborg
Так обьектный файл как раз машинный код и содержит, и его размер таки меньше получился.

Надо смотреть на опции сборки, активирован ли дебаг режим, сделан ли strip…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы