Стоимость пространств имен - PullRequest
4 голосов
/ 20 марта 2019

Какова стоимость определения пространств имен в c ++?Под этим я конкретно подразумеваю увеличение времени компиляции / выполнения и / или объем памяти.Допустим, у меня есть тривиальная программа с заголовочным файлом и .cpp с main.Заметил бы я изменение в вышеупомянутой статистике, если бы я, например, определил namespace в своем заголовке?Как насчет 10, 100 или 1000 пространств имен?Что если они определены, но никогда не используются: изменит ли это ответ?Я думаю, вы могли бы сказать, что мне любопытно, как эта конструкция взаимодействует с компилятором (ами).

Точно так же мне любопытно влияние struct / class определений и using, но яне мог придумать хорошего названия для вопроса, охватывающего все три.

Ответы [ 3 ]

10 голосов
/ 20 марта 2019

Какова стоимость определения пространств имен в c ++?

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

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

Под этим я подразумеваю время компиляции

Потенциально незначительно.

увеличение времени выполнения

На практике нет.

Заметил бы я изменение в вышеупомянутой статистике, если бы я, скажем, определил пространство имен в своем заголовке?

Вы можете узнать, измерив.

Вы, вероятно, не заметите.

4 голосов
/ 20 марта 2019

Под этим я подразумеваю время компиляции

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

Этопреимущество теряется при использовании using namespace xyz;

Дальнейшее улучшение времени компиляции может быть достигнуто за счет использования дружественных функций вместо свободных функций, поскольку ADL будет иметь еще меньшую перегрузку для проверки (в случае операторов или если вы уже использовалиADL)

1 голос
/ 20 марта 2019

Я не могу с этим поделать, но вот реальный (хотя и нерегулярный) пример реальной стоимости пространств имен.

Несколько лет назад я работал в крупной компании с очень сильным технологическим присутствием (больше не было бы сказано о них здесь).Одним из отличительных аспектов их кодовой базы было то, что она была преимущественно на стороне сервера, двоичные файлы Unix , скомпилированные в 32-битном режиме .Одно из соглашений кодирования, использованных в компании, заключалось в том, что каждое имя должно быть помещено в 3 вложенных пространства имен - довольно длинное пространство имен компании, за которым следует 3-именное пространство имен, а затем еще одно из 5 символов.(Были исключения для унаследованного кода).

База кода была огромной (как в случае связывание исполняемого файла занимало до 15 минут на очень мощной машине), и они приходили кестественный предел размера исполняемого файла для 32 бит.Скоро - новый код был добавлен, и предел гибели приблизился.Многие решения обсуждались в режиме срочной продажи, и одно из них заключалось в том, что если бы мы просто использовали сокращение для названия компании в пространстве имен и могли использовать меньше символов во вложенных пространствах имен, мы бы отложили гибель 32-битной системы.ограничение на несколько месяцев!

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

...