Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Оптимизация размера программ (EXE)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

Открыть новую тему     Написать ответ в эту тему

vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разбираясь с темой наталкивался на разные документы и исходники. Решил обобщить все в одном топике, так как постоянно встречаю вопросы об оптимизации то там, то сям.
Ниже будут ссылки на документы и файлы.
 
Добавлено
самая лучшая статья по оптимизации для пишущих на VC++ 6,7:
http://www.rsdn.ru/article/cpp/crt.xml
или она же:
http://www.rsdn.ru/article/?51
статья на английском - автор Matt Pietrek - опять для MS VC++ :
"Reduce EXE and DLL Size with LIBCTINY.LIB"
http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx
с исходниками
 
 

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 16:29 01-11-2004 | Исправлено: vito333, 13:52 29-04-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня не получилось откомпилить.
Не хочет он воспринимать {$M 32768,0}

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 05:47 25-01-2005
Andrey_aka_Master



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ну дык да, как разрмер стека может быть 0 ? у меня тоже не получилось, я подумал мб опечатка или еще чего, но вот теперь понял, что просто прогон, интересно как такая статья попала на delphiworld...

Всего записей: 175 | Зарегистр. 24-03-2003 | Отправлено: 06:44 25-01-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мдя. Так что довольствуйся стандартными 16кб
Ну и пакеры юзай

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 06:49 25-01-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WELLROCK
Andrey_aka_Master
Это все фигня, что там написано вот смотрите

Цитата:
 
{$A+,B-,D-,F-,G+,I-,K-,L-,N-,P-,Q-,R-,S-,T-,V-,W-,X+,Y-}
{$M 32768,0}
uses WinTypes, WinProcs;
begin
  MessageBox(GetActiveWindow, 'Вася, это ты?', 'Dr.Bob',
    MB_ICONINFORMATION OR MB_OK)
end.
 

Интересная такая директива B- не находите? Особенно если встать на нее и нажать Ф1, то ничего по ней не выдастся. Надо писать $B-. Щас допеределываю и скомпилирую. Короче один фиг имеем 16 килобайт. Так что статья лажа.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:12 25-01-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да один хрен не может размер стэка на размер ехе влиять

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 07:16 25-01-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WELLROCK

Цитата:
Да один хрен не может размер стэка на размер ехе влиять

Это понятно, я про то, что если сам код дан с ошибками, типа $M 32768, 0 Хотя в хелпе написано, что ммаксимальный не может быть мнешьме минимального, а минимальный меньше 1024 то нет смысла ввобще верить статье.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 08:13 25-01-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это точно.

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 08:24 25-01-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Reduce the Size of Your Final EXE File
http://www.codeproject.com/tips/reducesixeexe.asp
--------------
есть примеры кода
 
 
Aggressive Optimizations for Visual C++
http://www.codeproject.com/tips/aggressiveoptimize.asp
--------------
есть примеры кода

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 06:47 26-01-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё для оптимизации можно юзать PE-оптимизаторы, которые просто выравнивают ехе без использования компрессии

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 13:12 27-01-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пара ссылок на тему ассемблера и оптимизации (англ.)
правда, не только (и не столько) по размеру
 
http://agner.org/assem/
http://www.intelligentfirm.com/

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 20:01 01-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создание программ на чистом WIN32API в DELPHI
ГОТОВЫЕ БИБЛИОТЕКИ
http://lenininc.narod.ru/win32api.html

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 13:16 02-02-2005 | Исправлено: vito333, 04:33 03-02-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уроки Iczelion'а (пер. Aquila) - Win32 API на ассемблере.
http://wasm.ru/publist.php?list=1

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 04:21 03-02-2005
Vicenzo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Очень заинтересовала эта тема.
Выше была полемика о смысле сжатия, смысл сжатия такой: чем меньше будет весить троян во вложении, тем быстрее и вероятнее его примет пользователь...
 
[Упаковщики]
Сжать UPXом или PECompactomом можно успеть всегда. Для начала я пытаюсь разобраться с остальными методами. Скорость работы в моём случае не важна, важен лишь размер.
 
[Компилятор]
Скомпилил простой HeloWorld (win32), где заюзан один единственный windows.h и 2 функции из него, в Debug прога получилась 109 Кб, в Release - 22 Кб. Весомое уменьшение. (использую Visual C++ .NET)
На VC++ перешёл недавно и еще не знаю всех тонкостей компилятора. Подскажите, пожалуйста, как его настроить для достижения минимального размера ехе на выходе (быстродействие не интересует). Может какие директивы специальные...
 
[Исходный код]
Есть идея: не юзать весь windows.h, а повыдёргивать из него только то, что используется, весьма трудоёмкое занятие, но стоит ли овчинка выделки? Это поможет?
 
[Другие методы]
Есть ли другие подходы к сжатию. Реально ли добиться 8 - 10 Кб на выходе (в простом HeloWorld32)?

Всего записей: 3 | Зарегистр. 03-02-2005 | Отправлено: 11:18 03-02-2005 | Исправлено: Vicenzo, 11:28 03-02-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Реально прочитать Уроки Iczelion'а  и получить троя весом килобайт в 5 (после упаковки).
P.S. На MS VC не пишу %)

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 11:23 03-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vicenzo
HelloWord32 может иметь размер 1кб.
для начала сходи по первой ссылке первого поста этой темы. после спрашивай.
-------------------------------------------
 
Кстати, обновился до 0.93 Peid.
 
 
-------------------------------------------
 
WCRT is a small C runtime library for Visual C++, which implements parts of its functionality through calls to the Win32API. It is meant as a replacement for the Visual C runtime library (libc.lib) for small projects. Source included.
http://www.ibsensoftware.com/download.html
 
использование подобных С-рантаймов позволяет легко и прозрачно уменьшить размер программы.
 
Добавлено:
пишу на MSVC++

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 10:41 04-02-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
использование подобных С-рантаймов позволяет легко и прозрачно уменьшить размер программы

Только вот mfc-шных либ на компе может и не быть. И тогда проги не запустятся.
А на асме прога запустится везде

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 10:49 04-02-2005
Vicenzo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот к чему привели эксперементы:
Добился уменьшения размера ехе этой проги с 22 Кб до 2 Кб (!) (компилятором MSVC), что ~ приблизительно на 500 байт больше чем аналогичная, скомпиленая на MASM32 (8.2).
 
WELLROCK, MASM конечно вещь хорошая, но на С++ оно как-то всё быстерее пишется, и проще
 
Удалось это уменьшение за счёт добавления директив - параметров линкера, который по умолчанию раньше кидал штук 50 лишних функций в импорт, теперь-же в ехе вшито только то что надо, ничего лишнего.
 
Директивы:
#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-merge:.data=.text")
#pragma comment(linker, "-nodefaultlib")     // не кидать в мой ехе кучу хлама
 
Еще не тестил на других машинах. Будет ли работать мой ехе с такими параметрами сборки без сторонних либ и всяких там runtime librarys на других машинах?

Всего записей: 3 | Зарегистр. 03-02-2005 | Отправлено: 12:03 04-02-2005 | Исправлено: Vicenzo, 12:08 04-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
эээ брат, не путай, эта библиотека не завязана на MFC, только на WinAPI.
Я ее уже посмотрел - супер, это улучшенная версия LIBCTINY.LIB от Мэтта Питрека, гораздо обширнее и мощнее, плюс не дает никаких warnings при компиляции. В общем я тут же из своего проекта libctiny.lib убрал и вставил эту.
Рекомендую, в общем.

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 12:04 04-02-2005
WELLROCK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хм. Надо будет попробовать.

----------
Надоело всё уже =)
(с) где-то тут увидел

Всего записей: 728 | Зарегистр. 08-11-2004 | Отправлено: 12:40 04-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vicenzo
эта прога - будет. А вообще использование  

Цитата:
#pragma comment(linker, "-nodefaultlib")  

доставит много сложностей при более-менее развитой программе.
Но в целом - действуешь верно. Будут вопросы - спрашивай.

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 14:42 04-02-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Оптимизация размера программ (EXE)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru