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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сборка очень маленьких программ в Borland C++ Builder (06-май-2003)
http://devnvd.narod.ru/Files/LittleTask.htm
 
 
Добавлено:
Как пережить release-версию
-----------------------------------
Отлично, ваша программа работает. Вы протестировали все, что возможно. Пришло время выпускать продукт. И вы собираете финальную версию.  
И тут все рассыпается в прах.  
Вы получаете ошибки доступа к памяти, диалоги не появляются, контролы не работают, результаты выводятся неправильно - появляется либо часть, либо все эти проблемы. Плюс несколько дополнительных проблем, специфических для вашего приложения.  
И что теперь?  
Именно этому целиком посвящен данный обзор.
-----------------------------------
http://rsdn.ru/article/vcpp/survrls.xml?print
 
 
Добавлено:
Optimization: Your Worst Enemy
http://www.flounder.com/optimization.htm

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WinAPI Wrapper Library
http://winapi.chris.dragan.name/winapi.web
набор классов-оболочек для WinAPI.
Всего один .Н файл. Но супер .
Очень тонкая оболочка над основными элементами апи - интерфейс (почти весь - окна, комбобоксы, прогрессбары и пр.) и некоторые другие вещи (file, time и пр.).
Не добавляет к возможностям винапи ничего своего, только "заворачивает" то что есть в удобную форму.
В отличие от других подобных библиотек при установке ставит также хелп и визардов для быстрого создания скелета приложения, причем скелет будет не стандартным для АПИ С-подобным, а "классовым" и очень понятным. Возможен режим PURE_WRAPPER - тогда к "классовому" стилю добавляется обработка сообщений почти в С-стиле.
Несмотря на АПИшность при сборке в МС студии цепляется CRT startup code (это нормально) - размер скелета - 25-50 кб, но код чисто АПИшный. Можно собрать крошечный код - от 4 кб (при установке ставятся несколько примеров, в т.ч. один - 4 кб).
Визард позволяет за минуту создать полноценное приложение, вставить в готовую процедуру свою обработку события и вуаля!  
В общем, я еще не видел ничего подобного и сейчас активно тестирую.
Использую обрезание стартового кода CRT (библиотека выше - WCRT).
Скелет МДИ приложения с меню, работающими несколькими кнопками на тулбаре, ребаром (на котором тулбар и два комбобокса) в стиле ХР - получился 11 кб. Повозиться поначалу пришлось немного с парой ошибок из-за обрезания стартового кода.
Теперь на такой скелет уйдет минуты 3-4. Когда я делал МДИ интерфейс на винапи руками - потратил просто немерянно времени(не часы и не дни), и то он не дотягивает развитостью ребара.
Самое главное - библиотека не заменяет ни winapi, ни MFC, а может работать совместно с чем угодно!

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 08:17 14-02-2005 | Исправлено: vito333, 20:28 16-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
интересный примерчик крошечной программы
-----------------------------

Код:
 
 
#define STRICT
#define WIN32_LEAN_AND_MEAN
 
#include <windows.h>
#include <tchar.h>
#include <assert.h>
 
void CenterText(HDC hDC, int x, int y, LPCTSTR szFace, LPCTSTR szMessage, int point)
{
    HFONT hFont = CreateFont(- point * GetDeviceCaps(hDC, LOGPIXELSY) / 72,
0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE,  
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,  
PROOF_QUALITY, VARIABLE_PITCH, szFace);
//  assert(hFont);
 
    HGDIOBJ hOld = SelectObject(hDC, hFont);
 
    SetTextAlign(hDC, TA_CENTER | TA_BASELINE);
 
    SetBkMode(hDC, TRANSPARENT);
    SetTextColor(hDC, RGB(0, 0, 0xFF));
    TextOut(hDC, x, y, szMessage, _tcslen(szMessage));
 
    SelectObject(hDC, hOld);
    DeleteObject(hFont);
}
 
const TCHAR szMessage[] = _T("Hello, World");
const TCHAR szFace[]    = _T("Times New Roman");
 
#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-align:512")
 
extern "C" void WinMainCRTStartup()
{
    HDC hDC = GetDC(NULL);
//  assert(hDC);
 
    CenterText(hDC, GetSystemMetrics(SM_CXSCREEN) / 2,
   GetSystemMetrics(SM_CYSCREEN) / 2,
   szFace, szMessage, 72);
     
    ReleaseDC(NULL, hDC);
    ExitProcess(0);
}
 

 
размер должен получиться около 1536 байт
 
 
Добавлено:
что делает? догадайтесь сами

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кстати, может возникнуть вопрос - а зачем эта библиотека, если есть WTL, которая считается "тонкой" оболочкой над winapi.
 
так вот я попробовал применить "обрезание CRT" к аналогичной указанной выше проге (MDI, меню, тулбар(ребар), статусбар), скелет которой сбацал на WTL (wizard-ом) - ничего не вышло, слишком сложно, я не смог. Минимальный размер, которого я смог добиться - 66 кб. Против 16-17 на WinApi Wrapper Library.
 
Хотя конечно, все эти изыски - для маньяков
 
Добавлено:
надо отметить, что скелет на WTL выглядел чуть лучше за счет значков в меню.
 
Добавлено:
нда, на самом деле ситуация с размером скедета на WinApi Wrapper еще лучше ))) - размер 11 кб! Я не увидел, что по умолчанию вставляется набор иконок весом 4.5 - 5 кб.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
возник у меня вопрос - возможно ли сейчас EXE сделанный например в VС++ .NET как нибудь перевести в формат COM? ранее вроде можно было чего-то такое учинить с помощью утилит EXE2BIN и т.п. А вот как сейчас с этим дело обстоит?

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 16:51 23-02-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vito333
Нет нельзя. В com можно перевести только файлы ориентированные на ДОС. Если ты на VC++ .NET пишешь для дос -> то возможность (пусть и не большая) перевести в COM есть.
Можно попробывать сменить расширение с exe на com, но при этом формат не изменится

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 17:12 23-02-2005
Varenik



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Более того, COM файлы могут быть только меньше 64k

----------
Если нравится, считайте, что получилось…

Всего записей: 1767 | Зарегистр. 21-07-2001 | Отправлено: 08:07 24-02-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в общем вопрос по СОМ-файлам под Win32 закрыт

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 16:19 10-03-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
по поводу WinAPI Wrapper Library - выше которая.
В процессе работы с ней малость подправляю, так что если кого заинтересует, пишите - исправления мелкие, но нужные.

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 06:41 14-03-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попробовал Pelles C компилятор-IDE
интересный и легкий продукт.
Для мелких утилиток очень хорош.
Позволяет выравнивать ЕХЕ на любую величину, а не только на 0x200 - минимум для MS VC++ 7. Совместимость должна при этом страдать, но на вин2к такие проги у меня запустились.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
недавно вышел новый китайский суперпакер WinUpack 0.25 beta
http://dwing.go.nease.net/
на текущий момент превосходит в целом все остальные пакеры ЕХЕ файлов, проигрывая только FSG и MEW на крошечных файлах 10-15 кб.
 
например на файле 78 кб выиграл 4 кб у UPX, 5 кб у FSG, ну и т.д.
 
но некоторые антивири пока ругаются на него. Каспер - молчит.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WinUpack обновился до 0.26 beta.
Необходимо отметить, что некоторые антивирусы ругаются или конфликтуют с программами, им упакованными.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
необходимо учитывать, что библиотека WCRT сделана с целью минимизации кода, а некоторые функции, в ней реализованные, намного медленнее по скорости, при том, что размер совершенно не сэкономлен. Например реализованная в WCRT функция memcpy в 2.1 - 2.2 раза медленнее микрософтовской и в своей программе при использовании этой библиотеки лучше использовать M$ memcpy.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WinUpack обновился до 0.27 beta.
 
Добавлено:
DWinLib - A minimal Windows API wrapper

http://www.codeproject.com/library/DWinLib.asp
 
 
 
Велоспорт вчера, сегодня, завтра, или В поисках "Идеальной Библиотеки"
http://www.rsdn.ru/forum/Message.aspx?mid=1143827&only=1

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 13:42 14-05-2005 | Исправлено: vito333, 13:44 14-05-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
How Big Is My Program?
http://www.flounder.com/howbig.htm

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
программа Hello World!, размер 560 байт, компилятор - Pelles C
http://vito.rbcmail.ru/Misc/Micro.exe

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

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

http://rsdn.ru/File/41945/minidelphi.rar

Всего записей: 16 | Зарегистр. 03-11-2004 | Отправлено: 08:22 10-06-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladgri
а готовый ЕХЕ можно сразу в архив добавить для наглядности?
 
Добавлено:
и заодно ссылка из этого архива - создание интро 4К на Delphi
http://scene.migeel.sk/intro4k.html

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 13:22 11-06-2005
vladgri

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://rsdn.ru/File/41945/minidelphie.rar

Всего записей: 16 | Зарегистр. 03-11-2004 | Отправлено: 07:01 13-06-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
com-файлы у меня не запускаются (ХР сп2)

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 07:25 13-06-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