Выпуск против времени отладки - PullRequest
5 голосов
/ 24 марта 2009

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

В общем, что из двух быстрее?

Ответы [ 5 ]

13 голосов
/ 24 марта 2009

Ну, есть ряд переменных, которые могут влиять на вещи. Вот несколько причин, по которым отладка может быть быстрее:

  • Обычно режим отладки выполняет намного меньше оптимизаций, поскольку они могут испортить отображение между инструкциями и строками кода. Таким образом, компилятор выполняет там меньше работы.
  • Даже если полная отладочная сборка медленнее, отладочные сборки происходят намного чаще и обычно могут использовать преимущества инкрементных сборок намного больше, чем сборка выпуска. Поэтому довольно часто сборка Debug не должна выполнять почти столько же работы, сколько сборка Release.
2 голосов
/ 24 марта 2009

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

Это связано с тем, что версия релиза, вероятно, имеет более агрессивную оптимизацию, и это может помешать отладке. Кроме того, некоторые масштабные оптимизации занимают много времени. Время вставки отладочной информации в объектные файлы достаточно мало, чтобы его можно было игнорировать, и, вероятно, оно занимает меньше времени, чем чтение исходного кода с диска.

0 голосов
/ 24 марта 2009

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

Большинство компиляторов позволяют отключить оптимизацию при сборке релизов. Попробуй это. Ваше время сборки сократится. Вы также можете включить оптимизацию в отладочных сборках и увидеть, как увеличиваются времена сборки.

0 голосов
/ 24 марта 2009

Отладочные сборки обычно выполняются быстрее, потому что оптимизация не выполняется (что очень часто встречается в релизных сборках).

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

Основное различие между Debug и Release заключается в том, что Debug предназначен для отладки (включая символы отладки), а Release предназначен для более быстрой работы, поэтому вы используете сильную оптимизацию

0 голосов
/ 24 марта 2009

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

...