Ответ 1
В GCC компилятор (например, gcc
для C или g++
для С++) предупреждения требуют небольшого количества CPU время. Использовать, например. gcc -ftime-report
, если вы хотите получить подробный отчет о времени компилятора. Диагностика предупреждений зависит от уровня оптимизации.
Но оптимизация (особенно на высоком уровне, например -O2
или более) занимает гораздо больше времени, чем предупреждения. Эмпирически оптимизированное время компиляции пропорционально размеру блока компиляции и квадрату размера (например, в количестве Gimple инструкций или в строках кода C) самой большой функции. Поэтому, если у вас есть огромные функции (например, некоторые функции из десяти тысяч строк в некотором сгенерированном C-коде), вы можете разделить их на более мелкие части.
В первые дни MELT (плагин GCC и экспериментальная ветвь GCC -GPLv3 + лицензированы - реализация DSL для GCC, который я разработал и до сих пор работаю), он генерировал огромные функции инициализации в C (сегодня это меньше, чем случай, инициализация разделяется на многие функции С++, например, gcc/melt/generated/warmelt-base.cc из ветки MELT GCC в качестве примера). В это время я построил компиляцию -O2
по сравнению с длиной этой функции инициализации и измерил время компиляции по своей длине. Вы также можете поэкспериментировать с manydl.c. Опять же, квадрат наибольшей длины функции является экспериментальной мерой, но может быть объяснено проблемами распределения регистров. Кроме того, J.Pitrat также заметил, что огромные генерируемые функции C - благодаря его интересному CAIA система исчерпала компилятор.
Кроме того, выводятся предупреждения, а иногда IDE или терминал, считывающий вывод компилятора, могут замедляться, если у вас много предупреждений.
Конечно, поскольку несколько раз комментировали, предупреждения компилятора - ваши друзья (поэтому всегда компилируйте, например, gcc -Wall
). Поэтому, пожалуйста, улучшите свой код, чтобы вообще не получать предупреждения. (В частности, инициализируйте большинство ваших локальных переменных - я обычно инициализирую их все, поскольку компилятор может оптимизировать, удалив некоторые инициализации, если можно доказать, что они бесполезны).
Кстати, вы можете настроить GCC с помощью, например, MELT, чтобы добавить свои собственные настраиваемые предупреждения (например, чтобы проверить соответствие правил кодирования).
Кроме того, в С++ со странными шаблонами вы можете написать несколько десятков строк, которые требуют много времени для компиляции (или даже сбой компилятора из-за нехватки памяти, см. this вопрос).