Влияют ли псевдонимы пространств имен на время сборки в больших кодовых базах? (C )

#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 спасибо, авакар. это детализирует сложность операции.