Русский / Russian English / Английский

Сейчас на форуме: pofik (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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


Ранг: 72.5 (постоянный)
Статус: Участник

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

Всем привет.

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

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

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




Ранг: 338.3 (мудрец)
Статус: Участник
born to be evil

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

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




Ранг: 72.5 (постоянный)
Статус: Участник

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

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

{ Атач доступен только для участников форума } - MyECL.rar




Ранг: 338.3 (мудрец)
Статус: Участник
born to be evil

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

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

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




Ранг: 72.5 (постоянный)
Статус: Участник

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

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

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




Ранг: 276.1 (наставник)
Статус: Участник
RBC

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

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



Ранг: 512.7 (!)
Статус: Модератор

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

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



Ранг: 58.2 (постоянный)
Статус: Участник

Создано: 29 августа 2018 20:31 · Поправил: reverser New!
Цитата · Личное сообщение · #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 (посетитель)
Статус: Участник

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

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

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

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


Ранг: 51.5 (постоянный)
Статус: Участник

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

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

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


Ранг: 512.7 (!)
Статус: Модератор

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

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

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




Ранг: 338.3 (мудрец)
Статус: Участник
born to be evil

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

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

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




Ранг: 72.5 (постоянный)
Статус: Участник

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

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

Delphi 2, факт





Ранг: 39.4 (посетитель)
Статус: Участник

Создано: 30 августа 2018 14:45 · Поправил: 2nd New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

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

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

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



Ранг: 72.5 (постоянный)
Статус: Участник

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

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



Ранг: 512.7 (!)
Статус: Модератор

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

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


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




Ранг: 72.5 (постоянный)
Статус: Участник

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

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

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



Ранг: 5.9 (гость)
Статус: Участник

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

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

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



Ранг: 39.4 (посетитель)
Статус: Участник

Создано: 30 августа 2018 21:31 · Поправил: 2nd New!
Цитата · Личное сообщение · #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

Видеокурс ВЗЛОМ