Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2011, 18:59
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию Уменьшение размера EXE

Открываю я делфи (XE). Убираю юнит. В файле проекта убираю все строчки, кроме Begin и End. Лезу в настройки компиляции. Убираю все, что можно убрать (все проверки, дебаг инфу и т.д.) и нажимаю CTRL+F9. Получаю файл весом в 20кб.
Далее открываю екзешник дизассемблером IDA PRO и ужасаюсь... делфа по умолчанию пишет такую тучу функций, что становится плохо.

Такой вопрос: можно ли заставить делфу рачительнее относиться к коду? Ведь одно дело если я пишу используя их стандартные библы, и совершенно другое, если я хочу написать на чистом WinAPI. Visual Studio например умещает пустой файл в 6-7кб (хотя я считаю, что это тоже многова-то), значит в этом по идеи нет ничего особенно сложного.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #2  
Старый 13.03.2011, 19:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не получится.
Дело в том, что по умолчанию включается в проект модуль System. Все, что в нем, будет в бинарнике. С другой стороны, если бы будешь писать что-то более-менее большое, то эти 20 кб потом все-равно будут незаметны на фоне остального кода, так что особо напрягаться не стоит.
Ответить с цитированием
  #3  
Старый 13.03.2011, 19:24
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

В IDA PRO код примерно такой:
Код:
push    ebp
.itext:004050AD                 mov     ebp, esp
.itext:004050AF                 add     esp, 0FFFFFFF0h
.itext:004050B2                 mov     eax, offset dword_40406C
.itext:004050B7                 call    @Sysinit@@InitExe$qqrpv ; Sysinit::__linkproc__ InitExe(void *)
.itext:004050BC                 call    sub_40370C
А эта функция, что там вызывается, очень немаленькая, и она вызывает еще и еще...
В то время как чистый проект после плясок с бубном в VS10 (оказалось он сжимается до 2кб) выглядит как
Код:
push 0
call Exit_Process
что собственно более логично.

Может можно убрать систем?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 13.03.2011, 19:42
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Люблю я такие темы .
Ниже исходник окна на делфи без модулей на Api + сжатие итого = 1.3кб
Запускать батник для компиляции.
http://zalil.ru/30663794
__________________
If end Then begin;
Ответить с цитированием
  #5  
Старый 13.03.2011, 19:56
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Во, другое дело, спасибо
А скажите пожалуйста, есть ли возможность поменять командную строку запуска в делфе, чтоб не делать батник?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 13.03.2011, 20:13
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Код в MinProg.dpr компилируется с помощью компилятора
DCC32.exe + необходимые модули SysInit.pas и System.pas
потом готовая ехешка сжимается FSG.exe
Вышеперечисленную последовательность действий делает батник.
Так что без него некуда.
Делфи вобще может и не быть установленный на компе, всё что нужно
находиться в архиве.
Если просто откомпилировать в Delphi а потом сжать FSG то выходит 7.3кб
__________________
If end Then begin;

Последний раз редактировалось AND_REY, 13.03.2011 в 20:18.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter