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…
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы