Уровни оптимизации в 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

[-O vs -O -оптимизация всего модуля]

Другие вопросы по тегам