Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2009, 22:45   #1
Qousio
Пользователь
 
Аватар для Qousio
 
Регистрация: 02.05.2009
Сообщений: 27
По умолчанию Вопрос про размер экзешников и Include'

Здравствуйте.

Не так давно я начал изучать С++, сегодня решил для проверки своих знаний, написать небольшую игру в 160 строк.

Результат компиляции 149 кбайт, в паскале такая же игра была бы примерно 7-8 кбайт.

Возникли подозрения, что С++ статический прицепляет все Include'ы которые к нему присваиваются.

Как можно уменьшить размер файла?

Заранее спасибо!
Чем более читаете, не размышляя, тем более, уверяетесь, что много знаете, а чем более размышляете, читая, тем яснее видите, что знаете еще очень мало.
Qousio вне форума Ответить с цитированием
Старый 13.05.2009, 23:23   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

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

во вторых. что за игра? какие либы юзал? или быть может дебаг проект создал ты? (с). скорее всего твоя паскалевская версия юзает динамическую библиотеку, в то время когда версия на си включила этот код в исполняемый файл.
выложи код, скажу точно
vvviperrr вне форума Ответить с цитированием
Старый 14.05.2009, 01:13   #3
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
кол-во подключенных инклудов никак не зависит на размер бинарника
В Code::Blocks а именно в компиляторе MinGW замечал такую фишку....
Создаю пустой проект(консольный например или GDI) и пишу в него код(примерно строк 200) в итоге размер exe около 6.5 кб. Дальше просто вписываю #include <iostream.h>(остальной код не изминяю) и размер подскакивает до почти трёх сотен килобайт.
Как я понимаю - это особенность конкретного компилятора или нет....
Виталий Серов вне форума Ответить с цитированием
Старый 14.05.2009, 07:28   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Какая сборка то? А то для Debug'а это вполне нормально
pu4koff вне форума Ответить с цитированием
Старый 14.05.2009, 13:58   #5
Qousio
Пользователь
 
Аватар для Qousio
 
Регистрация: 02.05.2009
Сообщений: 27
По умолчанию

Вот код программы: (Пришлось залить на Pastebin, потому-что говорит "Вы ввели слишком длинный текст (5278 символов). Пожалуйста, сократите его до 5000 символов.")
http://pastie.org/477799

Приблизительно такой же код написан в паскале, вот только вместо Windows.h используется crt.
Компилятор VC++ 2008. Подозреваю, что дело в Iostream...
Даже программа в несколько строк с подключенным iostream очень большая.
Чем более читаете, не размышляя, тем более, уверяетесь, что много знаете, а чем более размышляете, читая, тем яснее видите, что знаете еще очень мало.
Qousio вне форума Ответить с цитированием
Старый 14.05.2009, 14:39   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

VC++ 2008 Express Edition.
Debug версия занимает 46Кб
Release - 13,5 Кб.
Если в Release вместо /MD в кодогенерации поставить /MT, то уже будет 155Кб, но тут уже хоть ни одного хедера не подключай, а меньше размер не будет)
pu4koff вне форума Ответить с цитированием
Старый 14.05.2009, 14:55   #7
Qousio
Пользователь
 
Аватар для Qousio
 
Регистрация: 02.05.2009
Сообщений: 27
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
VC++ 2008 Express Edition.
Debug версия занимает 46Кб
Release - 13,5 Кб.
Если в Release вместо /MD в кодогенерации поставить /MT, то уже будет 155Кб, но тут уже хоть ни одного хедера не подключай, а меньше размер не будет)
Аааа, кажись Вы говорите об AppWizard где выбираешь между "Win32 Debug" и "Win32 Release". Читал об этом в интернете, но там было для другого IDE.
Я просто через командную строку компилировал "cl -EHsc hangman.cpp"
Сейчас попробовал через IDE получилось 46 кб.

Нашел опцию где release версию выбираешь, беда в том, что я не вижу где он создает компилированный файл? Прочесал все папки в Мои документы\Visual Studio 2008, но там экзешника нету o_O

#Edit: Total Comьander походу завис, после перезапуска папка отобразилась.
Спасибо за помощь! А как через командную строку release версию компилировать?
Чем более читаете, не размышляя, тем более, уверяетесь, что много знаете, а чем более размышляете, читая, тем яснее видите, что знаете еще очень мало.

Последний раз редактировалось Qousio; 14.05.2009 в 15:10.
Qousio вне форума Ответить с цитированием
Старый 14.05.2009, 15:29   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В свойствах проекта в разделе С++ есть последний пункт командная строка. У тестового проекта моего написано:
Release: /O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReportrompt
Debug: /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReportrompt

Параметры всякие в принципе в свойствах проекта так же называются, так что легко можно определить что за что отвечает
pu4koff вне форума Ответить с цитированием
Старый 14.05.2009, 15:44   #9
Qousio
Пользователь
 
Аватар для Qousio
 
Регистрация: 02.05.2009
Сообщений: 27
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В свойствах проекта в разделе С++ есть последний пункт командная строка. У тестового проекта моего написано:
Release: /O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReportrompt
Debug: /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReportrompt

Параметры всякие в принципе в свойствах проекта так же называются, так что легко можно определить что за что отвечает
Понятно. Думаю мне следует ещё очень многое узнать о VC++
Чем более читаете, не размышляя, тем более, уверяетесь, что много знаете, а чем более размышляете, читая, тем яснее видите, что знаете еще очень мало.
Qousio вне форума Ответить с цитированием
Старый 14.05.2009, 16:56   #10
ben95
Новичок
Джуниор
 
Аватар для ben95
 
Регистрация: 22.12.2007
Сообщений: 204
По умолчанию

Цитата:
Сообщение от vvviperrr Посмотреть сообщение
2Qousio во первых. кол-во подключенных инклудов никак не зависит на размер бинарника. в исполняемый файл всключаются лишь те функции/классы, которые так или иначе вызываются из твоей программы.
Не соглашусь. В колледже при первом вопросе почему бы не подключить все библиотеки сразу? даётся ответ если ты не хочешь чтоб твоя программа весила до х....... мб. и этот объём был забит ненужными файлами.
ben95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про string xaero93 Общие вопросы Delphi 1 22.03.2009 16:57
Запуск экзешников по очереди Airou Общие вопросы Delphi 2 03.09.2008 21:15
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24