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

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

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

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

Сообщение Sergei I. Gorelkin » 22.10.2015 13:37:07

Читаю вас и прямо умиляюсь... "парадигма компиляции..."

Внутренний линкер, выкидывающий неиспользуемый код и данные, используется в виндовом в FPC уже где-то лет десять, вообще-то...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение Лекс Айрин » 22.10.2015 13:43:44

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

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

Сообщение vitaly_l » 22.10.2015 14:22:07

Sergei I. Gorelkin писал(а):Внутренний линкер, выкидывающий неиспользуемый код и данные, используется в виндовом в FPC уже где-то лет десять

Мнения разделились... Ну думаю началось: "буря скоро грянет буря"...
1) Так линкер есть? ( как говорит Sergei I. Gorelkin )
2) Или линкера нет, точнее сторонний? ( как говорит Лекс Айрин )
3) Или линкер используется сишный? (как говорит Снег Север )

Если он есть, то как линкеру сказать "удалить все имена и т.д.", какая конкретно команда для FPC ?


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

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

Сообщение Mikhail » 22.10.2015 14:30:52

Лекс Айрин писал(а):Sergei I. Gorelkinугу... что же тогда проги такие тяжелые?

RTTI... не очень удачная структура LCL,... проблемы с виртуальными методами...
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение Лекс Айрин » 22.10.2015 15:04:34

vitaly_l, создайте новый, пустой проект. В параметрах выставьте максимальную оптимизацию. Снимите галочку "генерировать отладочную информацию" и поставьте галочку "вырезать символы из исполняемого файла". Вы получите проект самого маленького размера. Все остальные действия только увеличат его размер. Если бы оптимизация была бы настолько хорошей, как говорил Sergei I. Gorelkin, то его размер был бы примерно 200-500 КВ (учтем код перемещения окна, изменения его размера и закрытия, хотя реальные файлы работоспособного приложения могут быть и меньшего размера. Как вам тестовый файл в 70 кб?). Реально он (в моем случае) весит 1,73 МБ (1 816 064 байт).

Добавлено спустя 9 минут 40 секунд:
Mikhail, было озвучено, что:
1) RTTI очень офигенная вещь.
2) удаляются не нужные в файле функции.

И, вообще-то, любая используемая функция известна во время компиляции программы. Даже если идет перегрузка функций, использование виртуальных методов или вызов функций по ссылке.

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

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

Сообщение vitaly_l » 22.10.2015 15:37:04

Лекс Айрин писал(а):В параметрах выставьте максимальную оптимизацию. Снимите галочку "генерировать отладочную информацию" и поставьте галочку "вырезать символы из исполняемого файла".

У меня именно это стоит в Лазарусе. Ещё включены: "умные компоновки", но я не знаю что, именно они делают; т.к. они ещё предполагают размер кучи, а я не понимаю как кучу можно указать заранее, если её рантайм вычисляет программа. И почему вывели отдельно? Непонятно.

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

Без разницы, суть "идеи" понятно изложена, если бы кто-нить про "адреса без названий" знал-бы, то уже идентифицировали-бы и сказали. Соответственно, конкретно такой фичи нет.

С другой стороны, есть оптимизатор... Но я честно говоря, думал, что он оптимизирует код при ассемблировании, т.к. у него 4 странные установки... и при ассемблировании все имена сохраняются ( сам видел ).

Остаётся только: "вырезать символы из исполняемого файла"... но символы это явно не названия: классов, переменных и функций. А чтобы РЕАЛЬНО сократить размер, нужно удалить из исполняемого файла именно их. И они занимают 30-80% программы, а в исполняемом файле, соответственно практически УДВАИВАЮТ размер файла, т.к. после компиляции / линкования - дублируются адресами. Но в Лазарусе нет фичи их удаляющей, иначе была-бы отдельная команда для FPC, т.к. при внешних библиотеках, без названий сложно (но можно обойтись поменяв парадигму ).


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

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

Сообщение Mikhail » 22.10.2015 16:09:31

Лекс Айрин писал(а):И, вообще-то, любая используемая функция известна во время компиляции программы. Даже если идет перегрузка функций, использование виртуальных методов или вызов функций по ссылке.


Вообще-то это не так, причиной этого стало появление библиотеки KOL, например. См. тут, например http://kolmck.net/docs/KOLbook_RU.htm. Или, вкраце, тут https://ru.wikipedia.org/wiki/KOL

Лекс Айрин писал(а): 1) RTTI очень офигенная вещь.

Да это так, но за все нужно платить... :)

Вы понимаете, что можно создать объект во время выполнения, по имени этого класса, считанного, например из файла? Получить все имена его паблишед свойств и, даже методов, в виде строк, а затем обратиться к ним? Как Вы собираетесь здесь исключать мертвый код? Это невозможно, даже теоретически.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение Лекс Айрин » 22.10.2015 16:32:10

vitaly_l писал(а): а я не понимаю как кучу можно указать заранее, если её рантайм вычисляет программа.


Если я правильно помню, имеется ввиду минимально допустимый размер кучи/стека.

Mikhail, проще говоря, на мертвый код забили... и после этого я должен считать RTTI отличной штукой?

Mikhail писал(а):Вы понимаете, что можно создать объект во время выполнения, по имени этого класса, считанного, например из файла?


А зачем? Если чисто для понтов, то я этого не понимаю. И не считаю офигенной возможностью. Для компиляторов это, возможно, и полезно, но тоже что-то сомнительно.
Да и вообще, развитие ООП, имхо, пошло не в ту сторону.

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

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

Сообщение Mikhail » 22.10.2015 16:37:17

Лекс Айрин писал(а):А зачем? Если чисто для понтов, то я этого не понимаю. И не считаю офигенной возможностью.


Гм, ну смотря что считать понтами... визуальная разработка гуя это понты? Ну там кнопочки мышкой потаскать, свойства объекта в инспекторе менять?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение Лекс Айрин » 22.10.2015 16:58:01

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

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

Сообщение Mikhail » 22.10.2015 17:01:37

Лекс Айрин писал(а):Mikhail, для этого можно использовать и более простые свойства.

В смысле? :?
Отказаться от визуального проектирования? Не использовать (или использовать по минимуму) виртуальные методы? :roll:
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение Лекс Айрин » 22.10.2015 17:13:51

Mikhail, зачем отказаться? Реализовать все по человечески.

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

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

Сообщение vitaly_l » 22.10.2015 17:23:26

Mikhail писал(а):Вообще-то это не так, причиной этого стало появление библиотеки KOL, например. См. тут, например http://kolmck.net/docs/KOLbook_RU.htm. Или, вкраце, тут https://ru.wikipedia.org/wiki/KOL


Вот просмотрел быстренько KOL и наткнулся на вот такое:
Код: Выделить всё
2. Программирование в KOL

2.1. Функции работы со строками

Итак, начнем с азов. Названия функций для преобразования строк в числа и наоборот в KOL, как уже говорилось, отличаются от названий аналогичных функций в SysUtils. Частица "To" в большинстве случаев заменена созвучной (для английского языка) цифрой 2: не IntToStr, а Int2Str, например. Вот неполный перечень таких функций: Int2Str( i ), Str2Int( i )*, UInt2Str( i ), Int2Hex( i, n ), Hex2Int( s ), Copy( s, i, n ), CopyEnd( s, i ), CopyTail( s, n ), и т.п..

Соответственно автор KOL предлагает заменить стандартные и довольно часто используемые названия функций, на новые "свои". А зачем? А смысл? Там по сути получается "новый набор всех стандартных функций" и имена у них похожи но другие..., вместо требуемой оптимизации СУЩЕСТВУЮЩЕГО КОДА. Это не оптимизация, это ПОДМЕНА. И возможно, там(в новых функциях) всё более грамотно или кратко написано, и действительно благодаря этому код в итоге вдвое меньше, чем в родном Лазарусовском, но тогда АВТОРУ KOL - нужно было добавить и свой IDE, т.к. 80-90% IDE он уже переделал в KOL-e...

Дальше про KOL, я, читать не стал, т.к. это явно не, то, что мне нужно ( хотя возможно там всё гениально и в 100 раз лучше чем в родном Лазарусовском коде ). Но по сути там, в итоге получается "умная обфускация" кода, только не перманентно программой, а предварительно человеком. И обфускации написанного мной кода там нет, а есть только подмена кода Лазаруса и т.д. других IDE. Если это действительно гениально и работает быстрее и меньше места занимает, то нужно заменять этим KOL код Лазаруса сохранив стандартные названия, а если нет, то слишком сложно этим KOL пользоваться (описание там "больше" чем у Лазаруса).


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

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

Сообщение Лекс Айрин » 22.10.2015 17:36:34

vitaly_l. добавь еще то, что в Лазаре библиотека KOL если и запустится, то с костылями. Есть, якобы, компоненты для виртуальной среды, но я не обнаружил файла пакета (только дельфийские) хотя на сайте поддержка декларировалась.

vitaly_l писал(а):Соответственно автор KOL предлагает заменить стандартные и довольно часто используемые названия функций, на новые "свои". А зачем? А смысл?


Фактически, это должен быть набор компонент с более компактным кодом. А названия функций менять... чтобы можно было использовать параллельно и обычные компоненты.

vitaly_l писал(а):вместо требуемой оптимизации СУЩЕСТВУЮЩЕГО КОДА. Это не оптимизация, это ПОДМЕНА.


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

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

Сообщение vitaly_l » 22.10.2015 17:44:30

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

Ну уж нет... Способы-то как раз есть. И их как минимум 3.
1) Умная обфускация.
2) Удаление названий из исполняемого файла (оставить только адреса после линковки).
3) Совмещение первого и второго.

И всего-то нужно надстройку и линковщик написать / оптимизировать. К кстати ВОЗМОЖНО, программы даже быстрее работать будут. Но никто не возьмётся я думаю. Трудоёмко, это: знающий потратит неделю, а незнающему понадобится 1-2 месяца....


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

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Tango и гости: 1

Рейтинг@Mail.ru