Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:
$value = preg_replace('/[^a-zA-Z_]*/', '', $value);
Я действительно не продумал это, но кажется, что удаление чего-либо, кроме символов и подчеркиваний может работать.
Основное правило:
Когда вам нужно отладить, используйте -O0 (и -g для генерации символов отладки.)
Когда вы готовитесь к его отправке, используйте - O2.
Когда вы используете gentoo, используйте -O3 ...!
Когда вам нужно поместить его во встроенную систему, используйте -Os (оптимизируйте по размеру, а не по эффективности.)
В руководстве по gcc перечислены все подразумеваемые параметры для каждого уровня оптимизации. На O2 вы получаете такие вещи, как постоянное свертывание, прогнозирование ветвлений и совместную работу, которые могут существенно изменить скорость вашего приложения в зависимости от вашего кода. Точные параметры зависят от версии, но они задокументированы очень подробно.
Для создания статической библиотеки вы используете ar следующим образом:
ar rc libfoo.a foo.o foo2.o ....
ranlib libfoo.a
Ranlib не всегда необходим, но нет причин не использовать его.
Относительно того, когда использовать какой вариант оптимизации, единого правильного ответа не существует.
Некоторые уровни оптимизации могут иногда снижать производительность. Это зависит от типа кода, который вы пишете, и от шаблона его выполнения, а также от конкретного процессора, на котором вы работаете.
(Чтобы дать простой канонический пример - компилятор может решить использовать оптимизацию, которая делает ваш код немного больше, чем раньше. Это может привести к тому, что определенная часть кода больше не будет помещаться в кэш команд, и в этот момент потребуется гораздо больше обращений к памяти - например, в цикле).
Лучше всего измерять и оптимизировать для всего, что вам нужно. Попробуйте, измерьте и определите.
Одно важное правило - чем больше оптимизаций выполняется в вашем коде, тем сложнее отладить его с помощью отладчика (или прочитать его разборку), потому что исходное представление C / C ++ удаляется от сгенерированного двоичного файла. По этой причине рекомендуется работать с меньшим количеством оптимизаций при разработке / отладке.
Существует множество оптимизаций, которые может выполнять компилятор, кроме разворачивания цикла и встраивания. Развертывание цикла и встраивание специально упоминаются там, поскольку, хотя они и ускоряют код, но и увеличивают его.
Чтобы создать статическую библиотеку, используйте «g ++ -c» для генерации файлов .o и «ar» для архивации их в библиотеку.