Различие в производительности между gcc и g ++ для программы C

Позволяет говорят, что я записал программу в C и скомпилировал его и с gcc и с g ++, какая компиляция будет работать быстрее? gcc или g ++? Я думаю g ++, компиляция заставит его замедлиться, но не уверенная в этом.

Позвольте мне разъяснить свой вопрос снова из-за опровержения о gcc.

Позвольте говорят, что я компилирую программу a.c как это на консоли.

gcc a.c

g++ a.c

какой a.out будет работать быстрее?

7
задан itsaboutcode 21 July 2010 в 18:52
поделиться

6 ответов

http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/G_002b_002b-and-GCC.html

GCC - это набор компиляторов. Он в основном используется для компиляции C, C ++, Ada, Java и многих других языков программирования. G ++ является частью коллекции компиляторов GNU (gcc).
Я имею в виду, что gcc также включает в себя g ++. Когда мы используем gcc для компиляции C ++, он использует g ++. Выходные файлы будут другими, потому что компилятор G ++ использует свою собственную библиотеку времени выполнения.

Изменить: Хорошо, чтобы прояснить ситуацию, потому что здесь у нас есть небольшая путаница в именовании. GCC - это коллекция компиляторов GNU. Он может компилировать Ada, C ++, C и полтора миллиарда других языков. Это «бэкэнд» для «клиентских» компиляторов различных языков, таких как GNAT. Прочтите ссылку, которую я сделал вверху страницы с GCC.GNU.Org.

GCC может также относиться к компилятору GNU C. Это скомпилирует код C ++, если будет задана команда -lstdc ++, но обычно он задохнется и умрет, потому что он не втягивает библиотеки C ++.

G ++, компилятор GNU C ++, как и компилятор GNU C, является интерфейсом к коллекции компиляторов GNU. Разница между компилятором C заключается в том, что он автоматически включает эти библиотеки и делает несколько других небольших настроек, поскольку предполагается, что ему будет загружен код C ++ для компиляции.

Отсюда возникает путаница. Это немного проясняет ситуацию?

-1
ответ дан 6 December 2019 в 05:42
поделиться

Я думаю, что они оба будут производить один и тот же машинный код, и поэтому одинаково быстро на вашем компьютере.

Если вы хотите выяснить это, вы можете скомпилировать сборку для обоих и сравнить их, но я ставлю на то, что они создают одну и ту же сборку, и, следовательно, один и тот же машинный код.

2
ответ дан 6 December 2019 в 05:42
поделиться

Профилируйте и опробуйте. Я уверен, что это будет зависеть от фактического кода, даже если для получения другого байт-кода потребуется потенциально очень странный случай. Хотя, если у вас нет extern C {} вокруг вашего кода C и / или отлично работает в C, я не уверен, как «компиляция его, как если бы это был C ++», может обеспечить какую-либо скорость, если только конкретные оптимизации компилятора в g ++ просто случаются , чтобы быть немного лучше для вашей конкретной ситуации ...

2
ответ дан 6 December 2019 в 05:42
поделиться

Исполняемые файлы gcc и g ++ - это просто внешние интерфейсы, а не настоящие компиляторы. Оба они запускают настоящие компиляторы C или C ++ (и ld, ar, все, что необходимо для получения запрошенного вами вывода) на основе расширений файлов. Так вы получите точно такой же результат. G ++ обычно используется для C ++, поскольку он связан со стандартной библиотекой C ++ (iostreams и т. Д.).

Если вы хотите скомпилировать код C как C ++, либо измените расширение файла, либо сделайте что-то вроде этого:

gcc test.c -otest -x c++
2
ответ дан 6 December 2019 в 05:42
поделиться

Сгенерированный машинный код должен быть идентичным. Версия a.out для g ++, вероятно, будет связана с парой дополнительных библиотек поддержки. Это замедлит запуск a.out на несколько системных вызовов.

На самом деле никакой практической разницы нет. Компоновщик Linux не станет заметно медленнее, пока вы не достигнете 20-40 связанных библиотек и тысяч символов для разрешения.

2
ответ дан 6 December 2019 в 05:42
поделиться

Во-первых: вопрос (и некоторые другие ответы), похоже, основаны на ошибочной предпосылке, что C является строгим подмножеством C ++, что на самом деле не так. Компиляция C как C ++ не то же самое, что компиляция C как C: это может изменить смысл вашей программы!

C в основном компилируется как C ++ и в большинстве случаев дает те же результаты, но есть некоторые вещи, которые явно определены , чтобы дать другое поведение.

Вот простой пример - если это ваш ac :

#include <stdio.h>

int main(void)
{
    printf("%d\n", sizeof('x'));
    return 0;
}

, то компиляция как C даст один результат:

$ gcc a.c
$ ./a.out
4

, а компиляция как C ++ даст другой результат (если вы не используете необычная платформа, где int и char имеют одинаковый размер):

$ g++ a.c
$ ./a.out
1

, потому что спецификация C определяет символьный литерал, имеющий тип int , а C ++ спецификация определяет его как тип char .

Во-вторых: gcc и g ++ не являются «одним и тем же компилятором». Используется один и тот же внутренний код, но внешние интерфейсы C и C ++ - это разные части кода ( gcc / c - *. C и gcc / cp / *.c в источнике gcc).

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

26
ответ дан 6 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: