Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Почему разные редакторы компилируют программы разной величины? (http://forum.oszone.net/showthread.php?t=50054)

vadimiron 03-06-2005 15:45 329831

Почему разные редакторы компилируют программы разной величины?
 
Я компилировал оди и тот же код 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 329833

vadimiron
Попробуй в настройках проекта в МС++6 поставить конфигурацию Release.

vadimiron 03-06-2005 16:11 329835

Цитата:

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

Savant 03-06-2005 23:14 329920

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 330372

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

McDAK 06-06-2005 14:32 330382

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

hasherfrog 06-06-2005 14:40 330390

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

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

vadimiron 06-06-2005 19:34 330478

Цитата:

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

hasherfrog 07-06-2005 10:07 330619

Мда, маловато будет [c]

pva 10-06-2005 12:36 331765

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 332701

Для интересующихся, с примером:
http://www.uinc.ru/articles/28/

mar 14-06-2005 16:29 332726

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


Время: 22:47.

Время: 22:47.
© OSzone.net 2001-