Сейчас на форуме: jinoweb (+6 невидимых)

 eXeL@B —› Программирование —› Delphi 10 Сompilation
Посл.ответ Сообщение


Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 29 августа 2018 12:59
· Личное сообщение · #1

Всем привет.

Раннее написал DLL-ку на делфях. В Delphi 6 (с отрубанием обработчиков исключений и т.д.)
DLL-ка компилится размером ~100 кб.
Сегодня поставил Delphi 10 (Tokio), после компиляции в ней, размер вырос до 1 мегабайта.
Закинул в отладчик, в ней куча "мусора" по мимо рабочего кода.
Перерыл Delphi 10 на предмет "вырубания" этого "мусорного" кода.
Так ничего путного не получилось, пытался отключать пакеты, которые не использую, результат
тот же - 1 метр.
Вопрос к господам, которые активно пишут на дельфях и особенно последних версий.
Как максимально оптимизировать компилируемый файл?
Т.е. какие конкретные манипуляции необходимо проделать в дельфях, чтобы максимально уменьшить размер?

P.S. Конечно же лазил в Google, много пишут, но никакой конкретики... типа используйте UPX или пишите на Win API.
Но по настройкам самого Delphi, по данному вопросу, ничего конкретного.

Заранее премного благодарен за советы




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 29 августа 2018 13:25
· Личное сообщение · #2

100 -> 1000 - такого быть не может. либо дебаг инфа, либо куча юнитов добавлена. скелет (dpr/pas) выложи. вообще, оффтоп тема

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 29 августа 2018 13:33 · Поправил: BlackCode
· Личное сообщение · #3

ajax
Дебаг инфы нет, конечно.
P.S. Для компиляции нужен пакет EasyCompressionLibrary

eab1_29.08.2018_EXELAB.rU.tgz - MyECL.rar




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 29 августа 2018 13:56
· Личное сообщение · #4

BlackCode пишет:
пакет EasyCompressionLibrary

он и "привешивает" размер, вероятность 99%

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 29 августа 2018 14:06
· Личное сообщение · #5

ajax пишет:
он и "привешивает" размер, вероятность 99%

Ну в дельфях 6 размер в пределах 100кб с этим же пакетом.
Единственный вариант, что пакет для делфи 10 менее оптимизирован.
Хотя код должен быть идентичный, ну может с небольшими переделками под версию делфи.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 29 августа 2018 14:15 · Поправил: Kindly
· Личное сообщение · #6

Тоже как то перекомпилял dll, но в Delphi XE3, по-моему, нужна была поддержка x64 и Unicode - этой версии было достаточно, на выхлопе Release около 200Kb сравнительно 90Kb от Delphi 7. Так что скорее всего у тебя тот пакет подцепляет лишнего.

-----
Array[Login..Logout] of Life




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 29 августа 2018 16:04
· Личное сообщение · #7

вот почему автор TC (Total Commander) до сих пор сидит на древней дельфе (толи 6ка толи еще бородатее)



Ранг: 58.0 (постоянный), 13thx
Активность: 0.020.01
Статус: Участник

Создано: 29 августа 2018 20:31 · Поправил: reverser
· Личное сообщение · #8

https://github.com/jrsoftware/issrc

Unicode Inno Setup:
We compile all of Inno Setup's projects under Delphi 2009 with Update 3.
Newer Delphi versions should also work but will lead to significantly larger files.


Non Unicode Inno Setup:
We compile all of Inno Setup's projects under Delphi 2.01, with the exception of Compil32 which is compiled under Delphi 3.02 (for the better Far East character set support), and Inno Setup Preprocessor's ISPP which is compiled under Delphi 7.
Delphi 2.01 is used for the main projects because its VCL has a significantly smaller code size footprint than the later versions.



Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 29 августа 2018 20:32
· Личное сообщение · #9

sendersu пишет:
вот почему автор TC (Total Commander) до сих пор сидит на древней дельфе (толи 6ка толи еще бородатее)

сильно бородатее - там delphi2
борода такой длинны, что ее даже современный IDR не может загрузить, а когда то мог

| Сообщение посчитали полезным: sendersu

Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 29 августа 2018 20:53
· Личное сообщение · #10

BlackCode попробуй компильнуть лазарусом.
http://www.lazarus-ide.org/

| Сообщение посчитали полезным: BlackCode

Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 29 августа 2018 22:36
· Личное сообщение · #11

2nd пишет:
что ее даже современный IDR не может загрузить, а когда то мог

откройте чтоли багу на гитхабе
хорошо б указать в какой старой версии работало и все детали, что считаете нужными




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 30 августа 2018 09:10 · Поправил: ajax
· Личное сообщение · #12

2nd пишет:
сильно бородатее - там delphi2

не верю. x32 не менее 7. x64 на фрипаскале

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 30 августа 2018 11:04
· Личное сообщение · #13

ajax пишет:
не верю.

Delphi 2, факт





Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 30 августа 2018 14:45 · Поправил: 2nd
· Личное сообщение · #14

ajax пишет:
не верю. x32 не менее 7


Старое интервью Гислера (речь про x86):

Вопрос:
Широко известный факт, что вы до сих пор пишете свой файл-менеджер на допотопном Delphi 2.
С чем это связано?

Ответ:
Я являюсь обладателем лицензионных версий всех последних Delphi, поэтому я достаточно хорошо
представляю себе их возможности. Но дело тут вот в чем: компиляция exe-файла в Delphi 2 дает на
выходе файл ощутимо меньший по размеру, чем, например, в Delphi 7. Кроме того, тестирование показывает,
что exe-шник из-под Delphi 2 работает заметно быстрее, чем его полный аналог выпущенный
компилятором Delphi 7. Я сталкиваюсь с тем, что люди часто удивляются, что Total по-прежнему
работает очень быстро - я собираюсь сохранить эту его особенность, и, отчасти, секрет тут в
правильно выбранном компиляторе.

Добавлю, что кроме этого, Delphi 2 генерирует очень универсальный код, например, с полной
поддержкой 16-битовых приложений или Windows 95/98 - у меня до сих пор хватает таких клиентов.
В тоже самое время, TC прекрасно себя чувствует и в Windows 7.

| Сообщение посчитали полезным: GroundHog, BlackCode

Ранг: 8.2 (гость), 11thx
Активность: 0.050.04
Статус: Участник

Создано: 30 августа 2018 15:30
· Личное сообщение · #15

BlackCode пишет:
Но по настройкам самого Delphi, по данному вопросу, ничего конкретного.

Дело вовсе не в настройках, а в разжиревшем VCL. Delphi не умеет правильно оптимизировать и включает в код юниты целиком (авось понадобится). Отсюда и жирный размер. Можешь попробовать скомпилить один и тот же дефолтный проект в D6 и D10. Разница в размере на лицо. Настройки не помогут.
Из личного опыта для оптимизации не подключаю модули из поставки целиком, а в отдельный юнит копирую из них только то, чем реально пользуюсь. Например мне нужен FileExists из SysUtils. Лезем в SysUtils, копируем оттуда FileExists и всё, от чего он зависит и пихаем в отдельный юнит. Подключаем вместо SysUtils НашМодуль. Пробуем скомпилить - видим разницу. Другого пути оптимизации, к сожалению нет. Также стоит учесть, что чем старше версия компилятора, там жирнее самый "маленький" EXE/DLL.
Надеюсь, доступно разъяснил.

| Сообщение посчитали полезным: sefkrd, BlackCode, GroundHog, TryAga1n


Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 30 августа 2018 15:45
· Личное сообщение · #16

d745150
Спасибо за внятный ответ на мой вопрос.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 30 августа 2018 17:02
· Личное сообщение · #17

2nd пишет:
Delphi 2 генерирует очень универсальный код, например, с полной
поддержкой 16-битовых приложений или Windows 95/98 - у меня до сих пор хватает таких клиентов.
В тоже самое время, TC прекрасно себя чувствует и в Windows 7.


про 16-32 бит ясно, но внимание вопрос - как древнейшая Д2 генерит 64 бит код?
ведь TC есть не только 16 и 32 бит но и 64 с недавнего времени...




Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 30 августа 2018 17:55 · Поправил: BlackCode
· Личное сообщение · #18

sendersu пишет:
ведь TC есть не только 16 и 32 бит но и 64 с недавнего времени...

Ну естественно не на Delphi 2 под 64 бита компилит
х64 версия похожа тоже на делфи, bss секция характерна для делфи, хотя ни один снифер не распознает компилятор.



Ранг: 5.9 (гость), 6thx
Активность: 0.010
Статус: Участник

Создано: 30 августа 2018 21:10
· Личное сообщение · #19

sendersu пишет:
как древнейшая Д2 генерит 64 бит код?

Никак. Это делает Free Pascal Compiler v2.5.1 for x86_64-win64.



Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 30 августа 2018 21:31 · Поправил: 2nd
· Личное сообщение · #20

sendersu пишет:
про 16-32 бит ясно, но внимание вопрос

ответ был там же: "Старое интервью Гислера (речь про x86):"


про 64 бита, конечно, d2 не при делах. из того же старого интервью:
--------------------------------------------------
Вопрос:
- Итак, как я понял, следующая революционная 8-я версия - это переход на Lazarus и первая полноценная 64-битная версия TC (вместе с 32-битной)?

Ответ:
- Во-первых, разработка 32-битной версии TC останется на Delphi 2.

Во-вторых, насчет инструмента разработки 64-битной версии пока я точно не определился, но движусь в направлении Lazarus. Как результат этих усилий - с этого лета я уже успешно компилирую весь проект TC на Lazarus
----------------------------------


 eXeL@B —› Программирование —› Delphi 10 Сompilation
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати