GCC - оптимизация

November 28, 2012

Размер имеет значение. Да-да, оптимизация "в размер", длину бинарника - это важно.
При мЕньшем размере больше данных умещается в процессорный кэш. Как ни странно, но оптимизация направленная именно на уменьшение конечного размера бинарников приводит даже к более удачному результату, нежли оптимизация "в скорость", которая к сожалению приводит к ошибкам.
Итак, ближе к делу. Будучи бывшим gentoo-шником и слакварщиком в душе, скажу вот что:

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

Безопасные и надёжные флаги сборки:


CFLAGS='-pipe -Os -s -march=i486 -mtune=i686 -msse -msse2 -msse3 -mfpmath=sse -DNODEBUG -ffunction-sections -fdata-sections -fno-inline-small-functions'
LDFLAGS="Wl,-O1 -Wl,--gc-sections -Wl,--relax"

и обдирать бинарники лучше всего такой командой:

strip -s --remove-section=.comment --remove-section=.note

она удалит лишние, ненужные секции из готового бинаря.

С этими опциями безопасно делать даже make world, мир получится заметно меньше и шустрее.

(это мой пост http://eleksir8.blogspot.ru/2012/11/gcc.html)

PD: 11 Jan 2014:

Меня удивило некоторые дистрибутивы включают в себя несколько некорректно работающий gcc и в них -Os не всегда собирает рабочие бинари. Не все сборочные скриптовые обвязки правильно трактуют LDFLAGS, так что применять осторожно. Есть опция сборки -flto к ней следует присмотреться, одакое не все программы с ней собираются, кроме того что-то может не работать, но нерабочее состояние благо определяется сразу.

Next Post