Уровни оптимизации в Xcode
Я погуглил этот вопрос, чтобы прояснить некоторые основные понятия, но не нашел подходящего ответа для этого.
Сколько уровней оптимизации доступно для генерации кода в настройке сборки Xcode для компилятора Swift и Apple LLVM (Objective-C)?
2 ответа
Swift предоставляет четыре различных уровня оптимизации:
-Onone:
Это предназначено для нормального развития. Он выполняет минимальные оптимизации и сохраняет всю информацию отладки.
-O:
Это предназначено для большей части производственного кода. Компилятор выполняет агрессивную оптимизацию, которая может радикально изменить тип и объем выдаваемого кода. Отладочная информация будет выдана, но с потерями.
-Ounchecked:
Это специальный режим оптимизации, предназначенный для конкретных библиотек или приложений, в которых каждый хочет обменять безопасность на производительность. Компилятор удалит все проверки переполнения, а также некоторые неявные проверки типов. Это не предназначено для использования в целом, так как это может привести к необнаруженным проблемам безопасности памяти и целочисленным переполнениям. Используйте это только в том случае, если вы тщательно проверили, что ваш код безопасен в отношении целочисленного переполнения и приведения типов.
-Osize:
Это специальный режим оптимизации, когда компилятор отдает приоритет размеру кода над производительностью.
Вы можете узнать больше об этом здесь: Советы по оптимизации
Уровень оптимизации (GCC_OPTIMIZATION_LEVEL) и уровень оптимизации (SWIFT_OPTIMIZATION_LEVEL)
Цель-C GCC_OPTIMIZATION_LEVEL
Это часть генерации и оптимизации IRAST -> LLVM IR
-
None [-O0]
(по умолчанию для отладки) - неоптимизированный код для отладки -
Fast [-O, O1]
- между -O0 и -O2 простая оптимизация с минимальным временем компиляции -
Faster [-O2]
- лучшая оптимизация и более высокое время компиляции -
Fastest [-O3]
- [-O2] + оптимизация без ограничения времени компиляции или размера кода. лучшая оптимизация и самое высокое время компиляции -
Fastest, Smallest [-Os]
(по умолчанию для релиза) - [-O2] + оптимизации для уменьшения размера кода -
Fastest, Aggressive optimization [-Ofast]
- [-O3] + агрессивная оптимизация, которая может нарушить строгое соответствие языку -
Smallest, Aggressive Size Optimizations [-Oz]
- [-Os] + оптимизация для уменьшения размера кода
Свифт SWIFT_OPTIMIZATION_LEVEL
Это часть IR Generation and Optimization [Процесс сборки Xcode][О программе]
- (по умолчанию для отладки приложения) - минимальная оптимизация (отладка) - время сборки увеличивается, производительность снижается
- - максимальная оптимизация (по умолчанию для релиза приложения) - сокращение времени сборки, повышение производительности
-
-O -whole-module-optimization
- компилятор просматривает все исходные файлы в модуле (за исключением одного исходного файла). Например, выполнение функции из другого файла (в области модуля) будет быстрее
-
- - размер важнее производительности
//Дополнительный
- - производительность выше безопасности
SWIFT_DISABLE_SAFETY_CHECKS
Disable Safety Checks(SWIFT_DISABLE_SAFETY_CHECKS)
(по умолчаниюfalse
) - Отключить проверки безопасности во время выполнения, когда оптимизация включена (SWIFT_OPTIMIZATION_LEVEL
==-O
,-Osize
) (-Ounchecked
) и не учитывается при-Onone