По моему опыту, многие компиляторы не будут включать неиспользуемый код на основе объектных файлов. Некоторые могут не иметь этого разрешения и включать целые библиотеки («потому что это ускоряет процесс сборки»).
Например, дан файл junk.c
и он имеет три функции: Func1
, Func2
и Func3
. В процессе сборки создается объектный файл junk.o
, в котором есть все три функции. Если функция Func2
не используется, она все равно будет включена, потому что компоновщик не может исключить одну функцию из объектного файла.
С другой стороны, данные файлы: Func1.c
, Func2.c
и Func3.c
, с указанными выше функциями, по одному на файл. Если Func2
в Func2.c
не используется, компоновщик не будет его включать.
Некоторые компоновщики достаточно умны, чтобы исключать файлы из библиотек. Однако каждый компоновщик отличается по степени детализации включения файла (и, следовательно, исключения файла). Прочитайте руководство вашего компоновщика или обратитесь в его службу поддержки для получения точной информации.
Я предлагаю переместить подозрительные функции в отдельный файл (по одной функции на файл) и перестроить. Измерьте размер кода до и после. Кроме того, может быть разница между связью отладки и выпуска. Связывание отладки может быть ленивым и просто добавлять все, а связывание релиза прилагает больше усилий для удаления неиспользуемого кода.
Только мои мысли и опыт, Ваш пробег может меняться (YMMV).