Будут ли папки и пространства имен влиять на производительность в C ++ и кроссплатформенность? - PullRequest
5 голосов
/ 17 февраля 2012

Был задан вопрос о , повлияет ли структура пространства имен и папок на производительность сборки в C # .Ответы были очень полезными, но в тех случаях, когда они специфичны для C # и CLR.

Как пространство имен и структура папок влияют на производительность сборки, если она написана на C ++ с помощью gcc?Как обстоят дела с другими операционными системами, такими как Linux или Mac OS?

Если есть какие-либо существенные проблемы с производительностью, что мне следует делать или избегать, чтобы максимизировать производительность?

Ответы [ 2 ]

8 голосов
/ 17 февраля 2012

Чтобы немного расширить сказанное Кайлом:

Пространства имен - это не что иное, как синтаксический способ для пользователя и компилятора помещать имена в разные сегменты. Они существуют, чтобы позволить вам использовать более общие и подходящие имена для вещей, не беспокоясь о конфликтах с кем-то еще. std::vector отличается от математического vector класса. Они могут иметь одно и то же имя, если находятся в разных пространствах имен.

Что касается компилятора, функция в пространстве имен ничем не отличается от функции где-либо еще. У него просто забавное имя. Действительно, компиляторам предоставляется свобода делать то, что называется «искажение имени»: когда компилятор видит std::vector<int>, он может фактически преобразовать это в нечто вроде __std~~vector~t~~int32_t~~__ или что-то еще. Алгоритм искажения выбирается таким образом, чтобы ни одно пользовательское имя в глобальном пространстве имен не могло совпадать с именем, используемым диспетчером пространства имен. Таким образом, все имена в пространстве имен отделены от имен в других пространствах имен, даже глобальных.

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

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

8 голосов
/ 17 февраля 2012

Ни ваша иерархия каталогов, ни пространства имен не влияют на ваш скомпилированный код. Код, сгенерированный вашим компилятором, будет таким же. Это касается всех компиляторов и всех ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...