PDA

Показать полную графическую версию : Почему разные редакторы компилируют программы разной величины?


vadimiron
03-06-2005, 15:45
Я компилировал оди и тот же код WIN-API на Visual C++ 6.0 и на (бесплатном) Dev-C++ 4.9.9.2 (Mingw/GCC), так программа на первом получилась 168 кб, а на Dev-C++ всего 23 кб.
1)Почему такая разница?? Может Visual C++ 6.0 создаёт более качественный машинный код??
2)Может есть какие то настройки для влияния на размер компилируемой программы??
3)Есть ли какие то редакторы (то есть компиляторы), которые делает программу наименьшего размера??

lehha
03-06-2005, 16:00
vadimiron
Попробуй в настройках проекта в МС++6 поставить конфигурацию Release.

vadimiron
03-06-2005, 16:11
Попробуй в настройках проекта в МС++6 поставить конфигурацию Release.
Да, с релизом намного меньше, 36 кб, но всё равно Dev-C++ меньше: 22,7
Может есть компиляторы, которые ещё меньше делают?? Или есть для этого какие то другие методы??

Savant
03-06-2005, 23:14
vadimiron
Самое радикальное - вырезать CRT (C Run-Time)
Добавляйте в начале:

// Отключаем станд. библиотеки
#pragma comment(linker,"/NODEFAULTLIB")
// Объединяем секции кода и данных
#pragma comment(linker,"/MERGE:.rdata=.text")
// Уменьшаем выравнивание и разрешаем запись в секцию кода
// для VS.NET 2002 (у мну) - #pragma comment(linker,"/ALIGN:512 /SECTION:.text,EWRX")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
// Новая точка входа
#pragma comment(linker,"/ENTRY:NewWinMain")


воть, с подробностями - http://www.rsdn.ru/article/cpp/crt.xml

hasherfrog
06-06-2005, 14:16
vadimiron
Кстати, вот чего мне интересно. У Вас в комплекте Dev-C++ 4.9.9.2 (Mingw/GCC) должна идти такая утилитка strip. Попробуйте, пожалуйста, прогнать через неё файлик, полученный в MVS. Какой после этого размер екзешника тогда будет?

McDAK
06-06-2005, 14:32
vadimiron
Существуют также различные упаковщики exe-файлов, наверное один из самых известных - UPX и прочие (ASPack, PEcompact)

hasherfrog
06-06-2005, 14:40
Да, и ещё вопрос ко всем :]
У борланда когда-то была такая же утилитка - strip.
Ну в *никсах она есть. Есть даже sstrip ;] А у MVS аналог-то strip есть?
Чего-то я не могу найти :]

cvpack не узнаёт ключ /strip (хотя у меня vs 6.0)
rebase работает только с dll
Как быть?

vadimiron
06-06-2005, 19:34
Кстати, вот чего мне интересно. У Вас в комплекте Dev-C++ 4.9.9.2 (Mingw/GCC) должна идти такая утилитка strip. Попробуйте, пожалуйста, прогнать через неё файлик, полученный в MVS. Какой после этого размер екзешника тогда будет?
Из 168 кб эта утилита сделала 160 кб, не очень то сильно уменьшила

hasherfrog
07-06-2005, 10:07
Мда, маловато будет [c]

pva
10-06-2005, 12:36
1. Обычно код программы получается совсем маленьким. Больше места занимают стандартные библиотеки. А ещё много места (относительно кода маленькой программы) занимает то, что вашу программу стартует (т.е. запускает main или WinMain), а потом чистит мусор. Если это линковать внешне, то получится гораздо меньший екзешник. Попробуйте только откомпилировать (не линковать) и сравнивайте, сколько весит *.obj или *.o (или как он увас называется).
2. Попробуйте отлинковать */GCC со статическими библиотеками, crt, stdc++lib и multithreading. Думаю, что код получится больше.
3. А потом, в релизе, код может оказаться больше, из-за таких вещей как i468 instruction set, MMX, align, sheduling, loop unrolling, inlining которые сильно ускоряют работу на современных ПК.
4. Мой совет: не смотрите на величину кода, а обращайте внимание на качество, скорость, сходство debug и release по функциональности и т.д. В больших программах это важнее.

hasherfrog
14-06-2005, 15:25
Для интересующихся, с примером:
http://www.uinc.ru/articles/28/

mar
14-06-2005, 16:29
по поводу примера (а особенно объяснений к нему), когда я читала эту статью, как раз писала программу работы со звуковой карточкой. Ну и попробовала скомпилячить ее таким образом (с ручной доделкой интерфейса, естественно). Так вот весь этот проигрыватель, который под Borland Builder весил совсем не мало, и на VC без ухищрений, соответственно тоже, тут (на VC по методе статьи) стал не больше 8 Kb (если правильно помню). При этом там было все честь по чести: окно, меню, даже модальное about :)




© OSzone.net 2001-2012