#c #namespaces
#c #пространства имен
Вопрос:
У меня есть несколько (не так много) псевдонимов пространств имен, объявленных в заголовках. Некоторые заголовки имеют довольно высокую видимость в большой кодовой базе. Я перестал использовать их по большей части много лет назад, но некоторые все еще остаются. Я также удалил некоторые из них по пути, но я не успел до / после. Прежде чем я пойду и удалю их, мне было интересно, проверил ли кто-нибудь и рассчитал это, и каковы были результаты этого теста. Я не возражаю, что они существуют, если только они не повредят времени сборки.
Комментарии:
1. Я очень сомневаюсь, что добавление / удаление нескольких директив using изменит время сборки измеримым образом.
2. Сколько у вас времени сборки? Я не верю, что опыт других людей будет очень полезен, поскольку мы ничего не знаем о размере вашего проекта и зависимостях.
3. @avakar:
using
директивы иnamespace aliases
две очень разные вещи. Последнее не сбрасывает все содержимое пространства имен в другое.4. поиск имени @avakar занимает 6% сборки (здесь) с интенсивной оптимизацией и высокими настройками предупреждений (каждый из которых занимает много времени сам по себе, что влияет на этот процент). кроме того, псевдоним пространства имен !=
using namespace
.5. @littleadv полная сборка создает около 1 ГБ связанного и разделенного двоичного файла для x86_64. повторное использование является высоким, и многие программы являются шаблонными. время сборки велико, но в последнее время я не измерял.
Ответ №1:
Наличие псевдонимов пространств имен вряд ли существенно повлияет на время сборки, однако включение лишних заголовков, безусловно, влияет.
Этап компиляции C сильно страдает от всех операций ввода-вывода, которые он генерирует для получения содержимого нескольких включенных файлов, которые разбросаны по диску, удаление значительной части этих файлов должно улучшить время сборки.
Крайним случаем может быть, если у вас тяжелый код предварительной обработки / метапрограммирования, и в этом случае вы можете столкнуться с ограничениями пропускной способности процессора / памяти, и дополнительный файл не будет иметь большого значения.
Напоминаю, что лучший способ сократить время компиляции — устранить зависимости, чтобы инкрементные сборки были меньше.
Комментарии:
1. хорошо, спасибо за ваш ответ ( 1). в моем случае я уже сделал очевидные вещи, чтобы сократить время сборки здесь (к сожалению).
Ответ №2:
Отказ от ответственности: я могу говорить только из своего ограниченного опыта работы с компилятором clang.
В clang определение псевдонима пространства имен не приведет к копированию всех символов из исходного пространства имен в текущий контекст объявления (т. Е. Область видимости). Вместо этого компилятор будет передавать в контекст запись объявления псевдонима пространства имен.
Другими словами, размер таблицы символов увеличивается только на единицу, и поэтому поисковые запросы, которые не называют псевдоним, затрагиваются лишь незначительно. Конечно, если вы используете псевдоним, выполняются два поиска: один, который находит объявление псевдонима, и другой, который выполняет поиск в целевом пространстве имен.
Комментарии:
1. 1 спасибо, авакар. это детализирует сложность операции.