GCC (GCC-C и GCC-C++)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

GCC

Сообщение BratSinot »

Возьмем две одинаковые программы на C89 и C++. Скомпилируем их GCC. Почему программа на C++ весит в 20 раз больше чем программа на C89 и программа на C++ занимает в памяти больше места?
Если нужен конкретный пример то вот:
http://sourceforge.net/projects/xogame/
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: GCC

Сообщение AestheteAnimus »

Ну Вы можете и сами открыть листинг и map файл и посмотреть, что где находится.

Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC

Сообщение BratSinot »

AestheteAnimus писал(а):
10.03.2010 18:19
Ну Вы можете и сами открыть листинг и map файл и посмотреть, что где находится.

Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).

Я по секрету скажу, что команда 'g++' отличается от 'gcc', только тем что, подключает -lstdc++. Я спрашиваю почему программа написанная на C++ и скомпилированая GCC, весит в 20 раз больше чем так-же программа, только написанная на C89.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: GCC

Сообщение Crazy »

BratSinot писал(а):
10.03.2010 18:55
AestheteAnimus писал(а):
10.03.2010 18:19
Ну Вы можете и сами открыть листинг и map файл и посмотреть, что где находится.

Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).

Я по секрету скажу, что команда 'g++' отличается от 'gcc', только тем что, подключает -lstdc++. Я спрашиваю почему программа написанная на C++ и скомпилированая GCC, весит в 20 раз больше чем так-же программа, только написанная на C89.

потому что написана на C++, написал бы на ассемблере и скомпилировал gcc, получил бы еще меньше файл.

Desipere in loco
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: GCC

Сообщение RasenHerz »

BratSinot писал(а):
10.03.2010 18:55
Я по секрету скажу, что команда 'g++' отличается от 'gcc', только тем что, подключает -lstdc++.

Наглая ложь.
BratSinot писал(а):
10.03.2010 18:55
Я спрашиваю почему программа написанная на C++ и скомпилированая GCC, весит в 20 раз больше чем так-же программа, только написанная на C89.

с помощью objdump загляните во внутренности бинарников и вы увидите, что GCC добавляет очень много различных секций с информацией в бинарник (естественно нужной).
Спасибо сказали:
SergiusTux
Сообщения: 14
ОС: GNU/Linux, Slackware

Re: GCC

Сообщение SergiusTux »

BratSinot писал(а):
10.03.2010 17:11
Возьмем две одинаковые программы на C89 и C++. Скомпилируем их GCC. Почему программа на C++ весит в 20 раз больше чем программа на C89 и программа на C++ занимает в памяти больше места?


А с какими опциями выполняли компиляцию? Причин может быть масса...
1. Используются статические версии библиотек
2. Отладочная информация включена в исполняемый образ
3. и так далее

Опции в студию! :rolleyes:
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC

Сообщение BratSinot »

RasenHerz писал(а):
11.03.2010 09:19
BratSinot писал(а):
10.03.2010 18:55
Я по секрету скажу, что команда 'g++' отличается от 'gcc', только тем что, подключает -lstdc++.

Наглая ложь.

Вообще-то это правда. Если не верите, то наберите посмотрите вывод компилятора(вроде ключ '-v') и сравните 'gcc -lstdc++' и 'g++'. Они будут одинаковые. 'G++' просто по умолчанию подключает '-lstdc++'.

А с какими опциями выполняли компиляцию? Причин может быть масса...
1. Используются статические версии библиотек
2. Отладочная информация включена в исполняемый образ
3. и так далее
Опции в студию! :rolleyes:

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

P.S. И параметры компиляции я одинаковые использую если что.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5495
ОС: Gentoo

Re: GCC

Сообщение /dev/random »

Shell

$ cat test.c #include <stdio.h> int main() { printf("Hello\n"); return 0; } $ gcc test.c $ ls -l a.out -rwxr-xr-x 1 dev-random dev-random 8711 Мар 15 08:08 a.out $ mv test.c test.cpp $ g++ test.cpp $ ls -l a.out -rwxr-xr-x 1 dev-random dev-random 8838 Мар 15 08:09 a.out

Не вижу разницы в 20 раз.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC

Сообщение BratSinot »

/dev/random писал(а):
15.03.2010 08:12
Не вижу разницы в 20 раз.

Ты кому? Если мне то я и говорил что команда 'g++' отличается от команды 'gcc' только подключенной библиотеки C++.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5495
ОС: Gentoo

Re: GCC

Сообщение /dev/random »

BratSinot писал(а):
15.03.2010 15:17
/dev/random писал(а):
15.03.2010 08:12
Не вижу разницы в 20 раз.

Ты кому? Если мне то я и говорил что команда 'g++' отличается от команды 'gcc' только подключенной библиотеки C++.

Это, собственно, были "две одинаковые программы на C99 и C++". Если реализовать в варианте C++ вывод через cout, а не printf, то это уже будут две _разные_ программы, поскольку cout требует для своей реализации кучу различных шаблонов, реализации которых также необходимо при компиляции вставить в бинарник.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC

Сообщение BratSinot »

/dev/random писал(а):
15.03.2010 15:23
BratSinot писал(а):
15.03.2010 15:17
/dev/random писал(а):
15.03.2010 08:12
Не вижу разницы в 20 раз.

Ты кому? Если мне то я и говорил что команда 'g++' отличается от команды 'gcc' только подключенной библиотеки C++.

Это, собственно, были "две одинаковые программы на C99 и C++". Если реализовать в варианте C++ вывод через cout, а не printf, то это уже будут две _разные_ программы, поскольку cout требует для своей реализации кучу различных шаблонов, реализации которых также необходимо при компиляции вставить в бинарник.

Я знаю, когда я говорил две одинаковые программы, то я имел ввиду по функциональности.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: GCC

Сообщение watashiwa_daredeska »

BratSinot писал(а):
24.04.2010 17:53
Я знаю, когда я говорил две одинаковые программы, то я имел ввиду по функциональности.
А, ну дык STL при отладочной компиляции жрёт в 10 раз больше места и работает в 5-10 раз медленнее, чем при включении оптимизаций. Но при включенной оптимизации отлаживать её совершенно невозможно даже с отладочной информацией.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: GCC

Сообщение drBatty »

watashiwa_darede... писал(а):
24.04.2010 20:08
А, ну дык STL при отладочной компиляции жрёт в 10 раз больше места и работает в 5-10 раз медленнее, чем при включении оптимизаций. Но при включенной оптимизации отлаживать её совершенно невозможно даже с отладочной информацией.

А, дык это относится практически к любой нетривиальной программе на ++. Ну если вы любите использовать перезагрузку, чистые виртуальные функции, и прочий плюсовый изврат :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: GCC

Сообщение watashiwa_daredeska »

drBatty писал(а):
25.04.2010 00:08
Ну если вы любите использовать перезагрузку, чистые виртуальные функции, и прочий плюсовый изврат :)
Как раз таки перегрузка и чистые виртуальные функции не шибко много добавляют. Много добавляет метапрограммирование на шаблонах, которое инстанциирует фигову тонну классов и сильно завязано на inline'овые функции. Оптимизация это всё схлопывает и выкидывает, а в отладочном режиме этот мусор весь болтается, функции не инлайнятся, а честно вызываются, отсюда и тормоза.
Спасибо сказали: