Уменьшение размера исполняемого файла

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 24.10.2015 19:24:35

pupsik писал(а):Ну..у отличненько. Только это не решает вопроса. Т.е. почему "жира" много

RTTI + агрессивная взаимозависимость модулей, понуждают линкер оставлять кучу кода, который в можно было бы и вырезать.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение pupsik » 24.10.2015 19:38:36

Наивный вопрос: есть ли возможность вырезать всё это?

п.с.
К примеру бинарники дельфина (по крайней мере до 7 включительно) можно было "обработать". Тем самым убрав тот "наборчик" (и не только), который он автоматом (на всякий пожарный) добавлял. Что, иной раз, позволяло нормально уменьшить бинарник. По памяти: около 100кб пустого окна. В некоторых случаях больше.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 24.10.2015 19:46:28

pupsik писал(а):Наивный вопрос: есть ли возможность вырезать всё это?

Говоря о win32, единственно верный способ это реорганизовать структуру win32lcl.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение pupsik » 24.10.2015 20:50:06

Это был, скорее, риторический вопрос. :)
Если не ошибаюсь разработчики лазря (фпс) идут к уменьшению размера. Не семимильно но... :)
Вот и вывод:
1. Использовать АПИ системы
2. KOL
3. LLCL
Последние два не лишены глюкавости. Но..о можно работать.
Все эти варианты лишают возможностей полноценного лазаря. Зато позволяют уменьшить размер бинарника.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 24.10.2015 21:06:12

не риторический вопрос: почему бы вместо 1, 2 и 3 не помочь с LCL-ом?

Ведь хороший программист знает как написать, а очень хороший программист знает как исправить уже написанное.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение pupsik » 24.10.2015 21:31:03

Значит я очень плохой программист. Если ваша ритока касаема меня.
п.с.
Закончилось мое время патриотичности и безвозмездности. А финансовая стабильность, позволяющая делать то что я захочу, не наступила.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 24.10.2015 21:56:52

скалогрыз писал(а):хороший программист знает как написать, а очень хороший программист знает как исправить уже написанное

Тут нужен очень хороший программист, который видит всю картинку в целом. Он должен ясно понимать, видеть и чувствовать, что будет для ВСЕХ возможных вариантов, если например удалить из бинарника: Height, Width... Удалить-то их просто, а вот будет ли потом работать? Возможно, это нужно не только в бинарнике убрать, но и дозволить в системе. Это очень сильный и очень много знающий программист должен быть. У него в голове, должно быть всё FPC, и каждая "трещинка" FPC. И помимо этого, он ещё должен знать особенности всех систем... А решение простое, вот такая конструкция, в итоге заменит 1 мегабайт кода в бинарнике весом 3.1 Mb
Код: Выделить всё
someNameBool:=classNameString=dllClassName;



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение Mikhail » 24.10.2015 22:43:35

скалогрыз писал(а):
pupsik писал(а):скалогрыз 3 кб - с формой (просто на данный момент не могу скачать с форума. Рег. не помню :()?

ну так исходники есть, мог бы и сам подпилить ;)

Вот - hello world с формочкой. Итоговый размер 3584 байта. Без UPX.

Ну это уже экстремальная кастрация. :D
А вообще, RTL сильно раздут, там много лишнего, что можно вынести в отдельные библиотеки или вовсе исключить.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 24.10.2015 23:16:02

Mikhail писал(а):А вообще, RTL сильно раздут, там много лишнего, что можно вынести в отдельные библиотеки или вовсе исключить.

/facepalm
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 24.10.2015 23:46:17

Mikhail писал(а):/facepalm

А вот интересно, стало... если я хочу вообще без системы... например убрать с компа жёсткий диск... и загружать его с флешки, на которой какой-то написанный мной код... Сложно мне будет нарисовать обыкновенный белый квадрат на экране? (ВООБЩЕ без системы и даже без дос)
Что для этого нужно ? Точнее: много для этого нужно кода ?
Последний раз редактировалось vitaly_l 24.10.2015 23:49:14, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 24.10.2015 23:48:15

vitaly_l писал(а):Точнее: много для этого нужно кода ?

BIOS

Добавлено спустя 10 минут 41 секунду:
vitaly_l писал(а):Возможно, это нужно не только в бинарнике убрать, но и дозволить в системе. Это очень сильный и очень много знающий программист должен быть. У него в голове, должно быть всё FPC, и каждая "трещинка" FPC

нифига. Просто не нужно ленится. Я же говорил - агрессивная взаимосвязь модулей LCL.

Пример процедуры похудания (FPC 2.6.4, Lazarus где то недо trunk).
* Создаём пустой проект, кладём на него TButton кнопку. Отключаем stabs-ы, и включаем смартлинкинг. Компилируем.
* Результирующий проект размером 1,876,480 bytes
* Смотрим в .exe. Видим, тянется TListView (который в ComCtrls), а ComCtrls ещё не используется в Unit1.
* Делаем поиск по файлам на предмет отдельного слова ComCtrls в подпапке interfaces\win32.
* Модуль тянется через Win32Int. Коментируем использование модуля:
Код: Выделить всё
unit Win32Int;
...
uses
  Windows, // keep as first
  ActiveX, Classes,
  Translations, //ComCtrls,
  Controls, Buttons,

* пытаемся компилирировать - ругается на необяъвленный тип TListView, в TWindowProcHelper.DoMsgDrawItem (win32callback.inc) ! Вот оно! неправильное использование ООП. Правильное использование, если уже сам Win32CustomListView займётся этим MsgDrawItem. Коментируем.
(win32callback.inc)
Код: Выделить всё
      UpdateDrawListItem(LM_DRAWLISTITEM)
    else
    {if (lWinControl <> nil) and (lWinControl is TListView) and
      (TListView(lWinControl).ViewStyle = vsReport) and
      (PDrawIS^.ctlType = ODT_LISTVIEW) and
      (TListView(lWinControl).OwnerDraw)
    then
      UpdateDrawListItem(CN_DRAWITEM)
    else}
      UpdateDrawItems;
  end;

* пытаемся компилирировать - ругается на необяъвленный тип TCustomProgressBar. Та же песня! Коментируем.
win32lclintf.inc
Код: Выделить всё
    if SizeConstraints.Control is TCustomComboBox then
    begin
      // win32 combo (but not csSimple) has fixed height
      FixedHeight := TCustomComboBox(SizeConstraints.Control).Style <> csSimple;
    end
    // The ProgressBar needs a minimum Height of 10 when themed,
    // as required by Windows, otherwise it's image is corrupted
    {else if ThemeServices.ThemesEnabled and (SizeConstraints.Control is TCustomProgressBar) then
    begin
      MinHeight := 10;

      SizeConstraints.SetInterfaceConstraints(
        MinWidth, MinHeight, MaxWidth, MaxHeight);
    end};

* пытаемся компилирировать - собралось! Итоговый .exe размером 1,827,840 bytes.

Похудел на 48 килобайт! Спектрум же!
Теперь после похудательных процедур, нужно восстановить функционал и Listview и TCustomProgressBar-а в соответствующих Win32WSxxx модулях, а не в корневом Win32.

И так далее.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 25.10.2015 01:10:12

скалогрыз писал(а):Теперь после похудательных процедур, нужно восстановить функционал и Listview и TCustomProgressBar-а в соответствующих Win32WSxxx модулях, а не в корневом Win32.

И так далее.

Ага... и потом перестанет работать Listview или его потомок в другом модуле, который будет искать закомментированный код... проходили... В систему FPC и Lazarusa - лично я точно не полезу. Написать компонент или или ещё чего нить - это ещё могу( только писать нечего всё уже есть ), но карёжить FPC... Да ещё при условии что, FPC и IDE - ежедневно обновляются... Может только профи, который 100% знает, что он делает и это нужно делать не на локальной машине, а на сервере FPC, чтобы при обновлении снова не комментировать и не переделывать модули.

Посмотрел про биос - спасибо. Интересно, но непонятно. А где нить самый простой пример кода "загрузочной записи" можно найти ? Там бейсик ?


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 25.10.2015 01:20:15

vitaly_l писал(а):Ага... и потом перестанет работать Listview или его потомок в другом модуле, который будет искать закомментированный код... проходили...

странно, что ты процитировал правильную часть послания "нужно восстановить функционал и Listview и TCustomProgressBar-а в соответствующих Win32WSxxx модулях", но почему-то не предал её никакого значения.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 25.10.2015 01:29:22

скалогрыз писал(а):странно, что ты процитировал правильную часть послания "нужно восстановить функционал и Listview и TCustomProgressBar-а в соответствующих Win32WSxxx модулях", но почему-то не предал её никакого значения.

Я пять раз перечитал, не понимаю. У меня телепат поломался :cry:
Не могу идентифицировать, что Вы хотели сказать?
Возможно Вы думаете что я знаю что такое: "Win32WSxxx и Win32 - модули", я честно говорю, я их УВЫ не знаю...
И даже если я их найду в директории Лазаруса, то что мне это даст ?
Правда не понимаю, чего я должен был понять?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 25.10.2015 01:34:33

vitaly_l писал(а):Правда не понимаю, чего я должен был понять?

это правильное использование ООП и наследования.
Код, который относится исключительно к данным наследника (TListView), не должен выносится в предка win32proc.

Нарушение ооп привело к разжирению бинарика на 48 килобайт. Коррекция поможет сохранить и "худобу" и функционал.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru