Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Правда ли, что GCC генерирует самый медленный и неоптимальный машинный код из всех доступных компиляторов для C/C++?

ТехнологииПрограммированиеIt (информационные технологии)
Andrei Vukolov
  · 5,9 K
Пользователь старого TheQuestion  · 14 янв 2016

Приятно видеть вопрос по теме. Это далеко от правды так же, как я от Луны. GNU GCC ведет себя платформозависимо и генерирует ассемблер, сильно различающийся в разных ситуациях и на разных настройках, т.к. именно компилятор воплощает (implements) все поддерживаемые конструкции языка. И он воплощает их не так, как любой другой компилятор.

Он используется для сборки большей части программ на Linux (и самого Linux), плюс этот компилятор гораздо популярнее того же MSVC. Существуют серьезные различия между последними, но в плане скорости код GNU GCC чаще всего быстрее на 5-20%, при условии продуманного алгоритма и воплощения на C/C++. У GCC существуют настройки диалекта, задающие параметры генерации кода. В разных ситуациях их можно использовать как во благо, так во вред программе.

Если вы хотите провести собственное исследование на эту тему, вам придется вооружиться компиляторами для сравнения и написать код, (например) массивно использующий контейнеры STL C++, скомпилировать под разные платформы разными компиляторами, и замерить, но на одном и том же процессоре. Результат получите, но он не даст вам права ответить на ваш вопрос, т.к. для этого необходимо участие экспертов и публичность, а так же установление причин путем анализа вывода компилятора. Подобные исследования переодически проводятся, хоть и найти результаты очень сложно. Более того, с появлениями технологий, зависящих от процессора, например SSE, сравнение компиляторов стало еще более относительным.

Я бы, наверное, показал различия в машинном коде с комментариями, если бы на TheQuestion приветствовался и имел смысл код.

Другой вопрос это уже сравнение скорости работы компилятора. Здесь сказать сложно, т.к. я еще не переносил один и тот же большой проект с одного на другой, компилятор, как правило, используется один, для упрощения процессов тестирования и релиза. В отличие от коммерческих компиляторов типа Apple LLVM, Microsoft Visual C++, GNU GCC - это в целом научный проект свободной реализации C/C++, его изучают, что бы работать в профессиональной сфере на этом уровне. В данный момент это лучший выбор. Но считается, что (например) на Windows, MSVC работает заметно быстрее, чем GCC(mingw).

По скорости компиляции понятно, много раз слышал сетования на медленность реализации GCC под WinNT. Но правильно... Читать дальше
Специалист в области разработки систем управления. Трансгуманист. Интересуюсь...  · 14 янв 2016
Я бы хотел добавить к сказанному выше, что gcc и его специфические порты имеют сотни вариантов кодогенератора под разные платформы (более 60 только в базовом коде), поэтому на вопрос в целом сложно ответить. Даже номинально архитектурно-независимые оптимизации, проводимые со внутренним представлением кода, могут иметь различную степень эффективности на разных вычислитель... Читать далее