Оптимизация и флаги для создания статической библиотеки с g ++

Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:

$value = preg_replace('/[^a-zA-Z_]*/', '', $value);

Я действительно не продумал это, но кажется, что удаление чего-либо, кроме символов и подчеркиваний может работать.

30
задан Mateusz Piotrowski 27 January 2017 в 01:40
поделиться

4 ответа

Основное правило:

Когда вам нужно отладить, используйте -O0 (и -g для генерации символов отладки.)

Когда вы готовитесь к его отправке, используйте - O2.

Когда вы используете gentoo, используйте -O3 ...!

Когда вам нужно поместить его во встроенную систему, используйте -Os (оптимизируйте по размеру, а не по эффективности.)

41
ответ дан 27 November 2019 в 23:54
поделиться

В руководстве по gcc перечислены все подразумеваемые параметры для каждого уровня оптимизации. На O2 вы получаете такие вещи, как постоянное свертывание, прогнозирование ветвлений и совместную работу, которые могут существенно изменить скорость вашего приложения в зависимости от вашего кода. Точные параметры зависят от версии, но они задокументированы очень подробно.

Для создания статической библиотеки вы используете ar следующим образом:

ar rc libfoo.a foo.o foo2.o ....
ranlib libfoo.a

Ranlib не всегда необходим, но нет причин не использовать его.

6
ответ дан 27 November 2019 в 23:54
поделиться

Относительно того, когда использовать какой вариант оптимизации, единого правильного ответа не существует.

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

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

Лучше всего измерять и оптимизировать для всего, что вам нужно. Попробуйте, измерьте и определите.

Одно важное правило - чем больше оптимизаций выполняется в вашем коде, тем сложнее отладить его с помощью отладчика (или прочитать его разборку), потому что исходное представление C / C ++ удаляется от сгенерированного двоичного файла. По этой причине рекомендуется работать с меньшим количеством оптимизаций при разработке / отладке.

4
ответ дан 27 November 2019 в 23:54
поделиться

Существует множество оптимизаций, которые может выполнять компилятор, кроме разворачивания цикла и встраивания. Развертывание цикла и встраивание специально упоминаются там, поскольку, хотя они и ускоряют код, но и увеличивают его.

Чтобы создать статическую библиотеку, используйте «g ++ -c» для генерации файлов .o и «ar» для архивации их в библиотеку.

2
ответ дан 27 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

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