Форум по 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,004
Версия 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.
Ответить с цитированием
  #7  
Старый 13.03.2011, 20:23
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Не, я про другое. Без сжималки выходной файл весит 4кб. Вот я и думаю, можно ли сидя в нормальной среде как обычно нажимать F9, но командная строка чтобы была как в батнике для DCC32, чтобы он использовал именно те SYSTEM и SYSINIT, что в папке, и компилил с теми же параметрами. А потом уже если понадобится релиз-версию сжать через FSG отдельно.

И еще желательно заставить делфу воспринимать именно эти файлы system и sysinit (не переписывая те, что в папке source\sys\)
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 13.03.2011 в 20:35.
Ответить с цитированием
  #8  
Старый 13.03.2011, 21:53
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Не знаю, не пробовал так, но думаю врядли получиться не трогая файлы Delphi так компилировать.
__________________
If end Then begin;
Ответить с цитированием
  #9  
Старый 13.03.2011, 22:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

А так если попробовать: Uses System in 'system.pas' (имя урезанного пасника) ?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 13.03.2011 в 22:16.
Ответить с цитированием
  #10  
Старый 13.03.2011, 22:29
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Identifier Redeclared: 'System'...
Так что все равно предварительно убрать надо стандартный
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #11  
Старый 14.03.2011, 16:29
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

В MSVS можно собрать в 1к пустой файл.

Делфи тоже можно собрать в 1к, но такой изврат тебе не подойдет, он чисто теоретический, типа мол видите и в делфи можно собрать в 1к.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #12  
Старый 14.03.2011, 20:20
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

В тему Где то на форуме видел, вручную можно собрать 153 байта.
Меньше не слыхал.
__________________
If end Then begin;
Ответить с цитированием
  #13  
Старый 14.03.2011, 20:29
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Самый маленький 97 байт.

http://www.phreedom.org/solar/code/tinype/
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #14  
Старый 14.03.2011, 20:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В com файле там и 1 байт будет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #15  
Старый 14.03.2011, 20:31
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

ну дык речь про Delphi. Можно попробовать KOL компоненты, они сильно уменьшают.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter