GCC (GCC-C и GCC-C++)
Модератор: Модераторы разделов
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
GCC
Возьмем две одинаковые программы на C89 и C++. Скомпилируем их GCC. Почему программа на C++ весит в 20 раз больше чем программа на C89 и программа на C++ занимает в памяти больше места?
Если нужен конкретный пример то вот:
http://sourceforge.net/projects/xogame/
Если нужен конкретный пример то вот:
http://sourceforge.net/projects/xogame/
-
AestheteAnimus
- Сообщения: 135
- ОС: FreeBSD 8.0-RELEASE amd64
Re: GCC
Ну Вы можете и сами открыть листинг и map файл и посмотреть, что где находится.
Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).
Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Re: GCC
AestheteAnimus писал(а): ↑10.03.2010 18:19Ну Вы можете и сами открыть листинг и map файл и посмотреть, что где находится.
Предполагаю, что C++, не спрашивая, тянет свои библиотеки, которые на самом деле не нужны в данном коде. Попробуйте, к примеру, собрать прогу, дав линкеру опцию -lstdc++ (это только мое предположение - может это ничего в данном случае и не даст).
Я по секрету скажу, что команда 'g++' отличается от 'gcc', только тем что, подключает -lstdc++. Я спрашиваю почему программа написанная на C++ и скомпилированая GCC, весит в 20 раз больше чем так-же программа, только написанная на C89.
-
Crazy
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: GCC
BratSinot писал(а): ↑10.03.2010 18:55AestheteAnimus писал(а): ↑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
Наглая ложь.
с помощью objdump загляните во внутренности бинарников и вы увидите, что GCC добавляет очень много различных секций с информацией в бинарник (естественно нужной).
-
SergiusTux
- Сообщения: 14
- ОС: GNU/Linux, Slackware
Re: GCC
А с какими опциями выполняли компиляцию? Причин может быть масса...
1. Используются статические версии библиотек
2. Отладочная информация включена в исполняемый образ
3. и так далее
Опции в студию!
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Re: GCC
Вообще-то это правда. Если не верите, то наберите посмотрите вывод компилятора(вроде ключ '-v') и сравните 'gcc -lstdc++' и 'g++'. Они будут одинаковые. 'G++' просто по умолчанию подключает '-lstdc++'.
А с какими опциями выполняли компиляцию? Причин может быть масса...
1. Используются статические версии библиотек
2. Отладочная информация включена в исполняемый образ
3. и так далее
Опции в студию!
Да все я уже нашел ответ. Просто забыл кое-что. Проще говоря компилятор 'C++' работает тяжелее, ежели 'C'.
P.S. И параметры компиляции я одинаковые использую если что.
-
/dev/random
- Администратор
- Сообщения: 5495
- ОС: Gentoo
Re: GCC
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
Ты кому? Если мне то я и говорил что команда 'g++' отличается от команды 'gcc' только подключенной библиотеки C++.
-
/dev/random
- Администратор
- Сообщения: 5495
- ОС: Gentoo
Re: GCC
Это, собственно, были "две одинаковые программы на C99 и C++". Если реализовать в варианте C++ вывод через cout, а не printf, то это уже будут две _разные_ программы, поскольку cout требует для своей реализации кучу различных шаблонов, реализации которых также необходимо при компиляции вставить в бинарник.
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Re: GCC
/dev/random писал(а): ↑15.03.2010 15:23
Это, собственно, были "две одинаковые программы на C99 и C++". Если реализовать в варианте C++ вывод через cout, а не printf, то это уже будут две _разные_ программы, поскольку cout требует для своей реализации кучу различных шаблонов, реализации которых также необходимо при компиляции вставить в бинарник.
Я знаю, когда я говорил две одинаковые программы, то я имел ввиду по функциональности.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: GCC
А, ну дык STL при отладочной компиляции жрёт в 10 раз больше места и работает в 5-10 раз медленнее, чем при включении оптимизаций. Но при включенной оптимизации отлаживать её совершенно невозможно даже с отладочной информацией.
Мои розовые очки
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: GCC
watashiwa_darede... писал(а): ↑24.04.2010 20:08А, ну дык STL при отладочной компиляции жрёт в 10 раз больше места и работает в 5-10 раз медленнее, чем при включении оптимизаций. Но при включенной оптимизации отлаживать её совершенно невозможно даже с отладочной информацией.
А, дык это относится практически к любой нетривиальной программе на ++. Ну если вы любите использовать перезагрузку, чистые виртуальные функции, и прочий плюсовый изврат :)
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: GCC
Как раз таки перегрузка и чистые виртуальные функции не шибко много добавляют. Много добавляет метапрограммирование на шаблонах, которое инстанциирует фигову тонну классов и сильно завязано на inline'овые функции. Оптимизация это всё схлопывает и выкидывает, а в отладочном режиме этот мусор весь болтается, функции не инлайнятся, а честно вызываются, отсюда и тормоза.
Мои розовые очки