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

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

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

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

Сообщение Лекс Айрин » 24.10.2015 14:53:28

pupsik, не совсем верно. Для линукса все усугубляется приведением вызовов в вин подобный вид. Но в целом, скорее речь идет о неправильном проектировании самих библиотек. (ну или оптимизатора) Думаю, не сильно ошибусь, если скажу, что переписав LCL можно сильно уменьшить код не влияя на кроссплатформенность. Подозреваю так же, что поддержка дельфийского кода сыграла свою печальную роль.

vitaly_l, то на то, имхо, и выйдет.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение pupsik » 24.10.2015 15:02:52

Мне кажется что не сколько в LCL, а и FPC играет роль. Учитываю что используя фпс 3 + бинарник меньше на 100 кб, нежели в 2.6 :)
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение vitaly_l » 24.10.2015 15:07:12

Лекс Айрин писал(а):то на то, имхо, и выйдет.

Сомневаюсь... Допустим в программе 1111 классов. У них 1111 имён, весом по 111 Kb каждое имя... соответственно вес программы только за счёт этих имён увеличивается на 123 321 Кб - это довольно большое число.

Предположим только 5-ть из них суть есть внешние, то тогда нужно будет оставить только 555 Кб из 123 321 Кб, соответственно программа уменьшится на 122 766 Кб, если это число (122 766 Кб) перевести в мегабайты, то это вообще страшное число, от которого мурашки по коже. А Вы говорите, одно и тоже... Но суть понятна. И лишний, мёртвый код, на самом деле - тоже можно просчитать до компиляции и удалить; Но обсуждать это бессмысленно, т.к. никто делать не будет, только время потратим.


pupsik писал(а):Учитываю что используя фпс 3 + бинарник меньше на 100 кб, нежели в 2.6

Это не то число, там должно быть минимум 3 мегабайта.


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

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

Сообщение pupsik » 24.10.2015 15:26:01

там должно быть минимум 3 мегабайта.
Вы о чем?

Насчет размера строк. Попробуйте упакуйте текстовый файл. Т.е. архиватором. Как сильно изменится размер архива? И какое кол-во строк необходимо для сильного увеличения размера? Это грубый пример, но..о...
Вы пишете что путем уменьшения кол-ва строк будет сильно уменьшен размер... Для меня - это странный вывод. На кб. повлияет, а ощутимого уменьшения не будет.

п.с.
Всё же весьма интересно узнать - почему такой размерчик. Борланд хоть на VCL "грешил".
Хотя, учитывая, размерчики ХЕ... Уже не знаю: на что они "грешат". :)

Используя разные "приблуды" или АПИ системы можно уменьшить размер. Но..о - увеличит стоимость разработки и время. А принимать такое увеличение только из-за "дань моде", или "размеры диска позволяют" хм..м как то очень проф. звучит :mrgreen:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Лекс Айрин » 24.10.2015 15:33:56

pupsik, если программировать под чистым FPC (winAPI), то код делаtтся неприлично маленьким, даже если подключать ресурсы к проекту.

vitaly_l писал(а): Допустим в программе 1111 классов. У них 1111 имён, весом по 111 Kb


что за нереальные цифры вы говорите... во первых, откуда столько классов? Ну 500, от силы 600 я бы еще понял (хотя реально их вряд ли больше 100). Вес одного имени измеряемый в КИЛОБАЙТАХ это просто тихий ужас... немцы вместе с финнами нервно курят в сторонке. Не забывайте, что 1 килобайт это минимум 256 символов. (UTF8|UTF16), а так как в качестве идентификаторов идут только латинские символы, то и все 1024. длинна же идентификатора удобная для человека ну никак не больше 50 символов.

vitaly_l писал(а):И лишний, мёртвый код, на самом деле - тоже можно просчитать до компиляции и удалить;


Можно. Но так как размер уже мало ограничивает программистов, то никто не собирается усложнять оптимизатор. А кто хочет малого размера, то выбирает либо другие библиотеки компонент, либо программирует в winAPI (LinAPI)

Добавлено спустя 7 минут 47 секунд:
pupsik, для комплекса программ типа офисного пакета или полноценного графического редактора VLC/LCL очень удобна Да и мертвого кода там в сумме поменьше. Да и то, подозреваю, некоторая часть кода написана (или со временем переписывается) в winAPI или даже на ассемблере.

Проблема размера остро стоит для утилит, которые должны быстро загрузиться, выполнить свою работу и уйти по английски в трей (завершиться), для драйверов и игр. Хотя последний пункт все чаще уже неактуален.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение vitaly_l » 24.10.2015 15:42:34

pupsik писал(а):Вы о чем?

Создайте пустой проект, положите на него всяких элементов и какого нить кода на 777 Кб и откомпилируйте, получится 3,33 Мб
Подключите LLCL и снова откомпилируйте, программа станет весить 0,33 Mb...
Соответственно, как минимум: 3 Мб в коде были "мёртвым кодом".

Лекс Айрин писал(а):Но так как размер уже мало ограничивает программистов, то никто не собирается усложнять оптимизатор.

Вот это уже больше похоже на правду.

Лекс Айрин писал(а):немцы вместе с финнами нервно курят в сторонке. Не забывайте, что 1 килобайт это

Я утрирую. Чтобы придать вес "проблеме". В хорошей программе - каждый бит важен.


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

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

Сообщение pupsik » 24.10.2015 15:49:51

под чистым FPC (winAPI)
не тестил. Я предпочитаю "грязный" иде, без синеватого намека :D

vitaly_l Вы, явно, не о том... Я о формочках, а вы о консольке. Конечно юзверю проще с консолькой, нежели в гуи :lol:
Вопрос не о размерах консольного варианта, а о гуишке. Т.е. возьмите и проверьте: на сколько кб уменьшится пустая форма в 2.6 и 3.3.1...
Как и проверьте свою теорию о строках. Архиватором. А потом представьте: если этот текст "обернуть" в xml. Т.е. теги - черненький ящик. Из-за которого сыр бор. Т.е. что "пихается" в бинарник? Повторюсь: это грубый подход...

п.с
Тьфу ты: не досмотрел. Вы LLCL подключали. Но..о 3 + метра. Хм..м - многовато 2 + пустая... Тем более LLCL - не показатель для LCL. Учитывая что вы используете черный ящик. Т.е. откуда вы знаете каким образом работает LLCL? Вы бы ещё KOL учли. Там размерчик поменее будет.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Лекс Айрин » 24.10.2015 16:24:33

vitaly_l писал(а):Подключите LLCL и снова откомпилируйте, программа станет весить 0,33 Mb...


Тут вы не правы... не весь этот код мертвый. Часть из него избыточна. Это, например, могут быть обработчики исключений.

vitaly_l писал(а):В хорошей программе - каждый бит важен.


К сожалению, в силу особенностей системы и конкретно формата PE добиться экономии в 1бит невозможно. Дело в том, что есть, например, выравнивание сегментов/секций/заголовков, если не ошибаюсь, на границу в 16 байт минимум.

pupsik писал(а):Я предпочитаю "грязный" иде, без синеватого намека :D

Это уже нюансы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение pupsik » 24.10.2015 16:27:10

Это уже нюансы.
знаю. Но, неужто 3кб файлик получается? Да и разговор то о лазаре, а не фпс. Хоть и касается обоих.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Лекс Айрин » 24.10.2015 16:46:16

pupsik, я не знаю как в LLCL, но под API я видел программы от 70 килобайт. (не использующих дополнительные библиотеки).

pupsik писал(а):а и разговор то о лазаре, а не фпс.

Лазарь это, грубо говоря, оболочка (текстовый редактор/редактор форм) над FPC, позволяющая удобно использовать библиотеку LCL. Программу он компилировать сам не может.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

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

Hello World на FPC размером в 3kb
компилировать как
Код: Выделить всё
fpc test.pas
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Mikhail » 24.10.2015 17:01:53

Пример простой программы на LCL без использования дизайнера форм и соответственно файла ресурсов. :)
Код: Выделить всё
{$APPTYPE GUI}
{$mode objfpc}{$H+}
program SimpleForm;
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, Controls, Dialogs, Interfaces, Forms, StdCtrls;

type

{ TMyForm }

TMyForm = class(TForm)
     public
      edFirst : TEdit;
      edSecond: TEdit;
      lbFirst : TLabel;
      lbSecond: TLabel;
      btnExit : TButton;

      procedure IntFilter(Sender: TObject; var Key: Char);
      procedure ExitApplication(Sender: TObject);
      procedure ExitAction(Sender : TObject; var CanClose : boolean);

      constructor Create(AOwner: TComponent); override;
     end;

{ TMyForm }

procedure TMyForm.IntFilter(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8, #13]) then
  Key:=#0;
end;

procedure TMyForm.ExitApplication(Sender: TObject);
begin
Close;
end;

procedure TMyForm.ExitAction(Sender: TObject; var CanClose: boolean);
begin
CanClose:=MessageDlg('Предупреждение', 'Вы уверены что хотите закончить?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;

constructor TMyForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption:='Hello world';
Position:=poScreenCenter;

edFirst:=TEdit.Create(Self);
with edFirst do begin
  SetBounds(10, 30, 300, 21);
  Anchors:=[akTop, akLeft, akRight];
  OnKeyPress:=@IntFilter;
  Parent:=Self;
end;

lbFirst:=TLabel.Create(Self);
with lbFirst do begin
  Caption:='First';
  SetBounds(10, 15, 100, 21);
  FocusControl:=edFirst;

  Parent:=Self;
end;

edSecond:=TEdit.Create(Self);
with edSecond do begin
  SetBounds(10, 90, 300, 21);
  Anchors:=[akTop, akLeft, akRight];
  OnKeyPress:=@IntFilter;
  Parent:=Self;
end;

lbSecond:=TLabel.Create(Self);
with lbSecond do begin
  Caption:='Second';
  SetBounds(10, 75, 100, 21);
  FocusControl:=edSecond;

  Parent:=Self;
end;

btnExit:=TButton.Create(Self);
with btnExit do begin
  Caption:='Выход';
  SetBounds(230, 205, 75, 25);
  Anchors:=[akBottom, akRight];

  OnClick:=@ExitApplication;
  Parent:=Self;
end;

ActiveControl:=edFirst;
OnCloseQuery:=@ExitAction;
end;

var f1: TMyForm;
begin
Application.Initialize;
Application.CreateForm(TMyForm, f1);
Application.Run;
end.

Если интересно чего там так много откройте бинарник в блокноте и посмотрите, особенно ближе к концу. :)
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение pupsik » 24.10.2015 17:11:06

То что это оболочка - знакомо :) Значит вывод: не зависимо или на фпс, или используя лазарус. По идее ???
скалогрыз 3 кб - с формой (просто на данный момент не могу скачать с форума. Рег. не помню :()?

Mikhail я уже ранее писал. Я более кнопко-нажиматель. Т.е. очень предпочитаю шлёпать морду проги, а не писать. Время меньше, затрат меньше.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Лекс Айрин » 24.10.2015 17:15:50

pupsik, вообще-то, можно и в лазаре писать консольные программы. Просто проще для этого использовать блокноты для программистов (или обычные, что не совсем удобно. )
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение Mikhail » 24.10.2015 17:16:47

pupsik писал(а):Mikhail я уже ранее писал. Я более кнопко-нажиматель. Т.е. очень предпочитаю шлёпать морду проги, а не писать. Время меньше, затрат меньше.


В данном случае еще и результат одинаковый. :)

Добавлено спустя 56 секунд:
Лекс Айрин писал(а):Просто проще для этого использовать блокноты для программистов (или обычные, что не совсем удобно. )


Не проще, хорошая IDE всегда пригодится. :)
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru