Разделение C++ кодирует в несколько единиц перевода, представляют наверху на исполняемом размере?

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

Конечно, самое простое решение уменьшения объема объектного кода, связанного в заключительный исполняемый файл, состояло бы в том, чтобы разделить единицы перевода так, чтобы я получил больше .obj файлов каждый с меньшим количеством объектного кода. Я могу даже перейти к экстремальным значениям - помещает каждую функцию в отдельную единицу перевода.

Давайте притворимся, что я не забочусь о путанице, вызванной при наличии в десять раз большего количества .cpp файлов, и я не забочусь о возможном росте времени ссылки.

Будет такое разделение на многие объектные файлы представлять наверху на исполняемом размере? Исполняемый файл станет больше просто, потому что было в десять раз больше .obj файлов (но в целом у них есть точно те же функции и переменные), связанный в него?

5
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Вещи, которые с большей вероятностью повлияют на ваш окончательный размер EXE (не исчерпывающий список):

Вкратце, разделение кода на большее количество единиц трансляции, вероятно, не будет иметь никакого эффекта - тот же код, только реорганизованный. Это может даже ухудшить ситуацию, если ваш компилятор не будет учитывать оптимизацию всей программы, поскольку каждая единица перевода содержит меньше информации о вашей программе.

3
ответ дан 14 December 2019 в 13:33
поделиться

Я думаю, что с современными компиляторами выигрыш в размере вывода будет слишком незначительным. Насколько мне известно, компиляторы используют только те функции, на которые есть ссылки в вашем коде. Другие функции и символы в выходном файле пропускаются.

2
ответ дан 14 December 2019 в 13:33
поделиться

Нет. Я думаю, что вам нужно либо перекомпилировать вашу статическую библиотеку как разделяемую библиотеку, либо использовать что-то вроде: strip -g -s -R .comment для удаления неиспользуемого кода.

1
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

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