LINUX.ORG.RU

Размер бинарника и GCC


0

0

Сразу оговорюсь, что сравнение размеров делал после strip (без опций) и опции компиляции для большого C-файла и нескольких одинаковые.

Была некая программа одним большим C-файлом. Вынес одну функцию во новый C-файл, её прототип определил в новом H-файле. Собрал как и раньше, только указал уже не один C-файл для GCC, а два. Бинарник получился меньше. Стал выносить больше C-функций, бинарник стал уменьшаться. Даже вынос глобальных переменных с typedef-ами уменьшил бинарник на несколько байт.

Получается, если на каждую функцию сделать отдельный файл, то бинарник будет совсем маленький?

GCC стандартный, из Slackware.
$gcc -v
Configured with: ../gcc-3.4.6/configure --prefix=/usr --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --target=i486-slackware-linux --host=i486-slackware-linux
Thread model: posix
gcc version 3.4.6

Кто не верит, пусть проверит ... на "Hello World" не работает, но на сложном примере - наверняка ;-)

★★★★★

а если эти маленькие объектники сначала собрать в архив ar`ом, то размер будет ещё меньше..:)

anonymous
()
Ответ на: комментарий от anonymous

Не верил, но попробовал. 20 байт добавилось :-(

saper ★★★★★
() автор топика
Ответ на: комментарий от xnix

gcc -pipe
-O20 -march=athlon-tbird -ffast-math -fomit-frame-pointer
-Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual
-ansi -pedantic-error
*.c -lm -o my.bin

для удобства разбил на несколько строчек

saper ★★★★★
() автор топика
Ответ на: комментарий от xnix

gcc-4.2 и меньше не знают про уровень оптимизации больше чем 3, т.е. там можно писать хоть "сто тыщ мильёнов"

catap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.