Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.31;
Скачать: CL | DM;

Вниз

О результате трудов - откомпилированных файлах ...   Найти похожие ветки 

 
User   (2008-07-19 23:07) [0]

Не секрет, что компилятор Delphi в результирующие файлы впихивает все, что надо и, что самое неприятное, что не надо. Дабы в этом убедиться, достаточно откомпилтровать пустышку в виде формы и используя только Forms. При просмотре в eXeScope можно увидеть и Bitmap из 11 картинок, и Dialog (DLGTEMPLATE), и String (11 записей), RCData (в полном составе, включая TFORM1 в виде dfm), стандартные курсоры, ну и, конечно - иконка.
Так вот, есть ли какие-то:
- установки компилятора (-$O+ присутствует), чтобы не включать лишнего в компилируемый файл,
- внешние программы (не упаковщики РЕ), чтобы исключить ненужности из откомпилированного файла.


 
SergeyIT ©   (2008-07-19 23:20) [1]

Возьмите KOL.


 
User   (2008-07-19 23:30) [2]

KOL вариант, но, насколько я осведомлен, при этом для написания кода придется дополнительно поработать ручками (и головой). В принципе, попробую установить, попробую использовать, а там отпишу ...


 
Amoeba ©   (2008-07-19 23:34) [3]


> компилятор Delphi в результирующие файлы впихивает все,
> что надо и, что самое неприятное, что не надо.

Издержки ООП.

1. На этапе линковки нереально определить, какие виртуальные методы и весь тянущийся за ними код будут реально вызываться в компилируемом приложении. Соответственно потянутся и ресурсы.


> достаточно откомпилтровать пустышку в виде формы и используя
> только Forms.

2.  Но если на этой пустышке нарастить "мясо", то размер исполняемого файла будет расти не так уж и быстро, поскольку куча полезного кода уже былав "пустышке".

> Так вот, есть ли какие-то:
> - установки компилятора (-$O+ присутствует), чтобы не включать
> лишнего в компилируемый файл,
> - внешние программы (не упаковщики РЕ), чтобы исключить
> ненужности из откомпилированного файла.

3. Нет и не может быть. См. п. 1. Единственно можно убрать действительно неиспользуемую в программах на Delphi (к DLL это не относится) таблицу релокаций (утилитой StripReloc http://jrsoftware.org/striprlc.php).


 
Amoeba ©   (2008-07-19 23:38) [4]


> KOL вариант, но, насколько я осведомлен, при этом для написания
> кода придется дополнительно поработать ручками (и головой).
>  В принципе, попробую установить, попробую использовать,
>  а там отпишу ...

Флаг тебе в руки и барабан на шею.


 
User   (2008-07-19 23:52) [5]

> Соответственно потянутся и ресурсы. ... жаль ...

> 2.  Но если на этой пустышке нарастить "мясо", то размер
> исполняемого файла будет расти не так уж и быстро, поскольку
> куча полезного кода уже былав "пустышке".

сегласен, подтверждено экспериментально ...

> 3. Нет и не может быть. опять же - жаль, ... StripReloc действительно уменьшает размер (6,3 % на пустышке) - может быть полезна ...


 
User   (2008-07-19 23:54) [6]

> Флаг тебе в руки и барабан на шею. ... не хочется ;-)
Установить то установил, но дальше ... надобно доучиваться ...


 
Johnmen ©   (2008-07-19 23:55) [7]


> Не секрет, что компилятор Delphi в результирующие файлы
> впихивает все, что надо и, что самое неприятное, что не
> надо.

Радует, что есть ещё люди, для которых нет секретов...


 
Anatoly Podgoretsky ©   (2008-07-20 00:19) [8]


> При просмотре в eXeScope можно увидеть и Bitmap из 11 картинок,
>  и Dialog (DLGTEMPLATE), и String (11 записей), RCData (в
> полном составе, включая TFORM1 в виде dfm), стандартные
> курсоры, ну и, конечно - иконка.

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


 
User   (2008-07-20 00:33) [9]

если рассматиривать текущий проект как состоявшийся (пустышка), лишнего здесь Bitmap, Dialog, String-с и курсоры (если используется стандартный). То же можно применить и к любому проекту, который уже состоялся ...
> как компилятор должен поковыряться в твоих мозгах, чтобы это узнать.
- зачем ему ковыряться, достаточно включить в конечный файл только действительно нужное (ну, как вариант, после того как ему "помочь" в выборе) ...  

ЗЫ: я нивкоем разе не претендую на критику кампилятора от Builder.


 
Германн ©   (2008-07-20 00:44) [10]


> ну, как вариант, после того как ему "помочь" в выборе

Поскольку ему "помочь" можно только ручками и только непременно при серьёзном участии весьма грамотной головы, то не майся дурью. Начинка выделки не стоит!


 
User   (2008-07-20 00:50) [11]

> не майся дурью принято ...


 
sniknik ©   (2008-07-20 01:05) [12]

> достаточно включить в конечный файл только действительно нужное
включается и так только нужное, то что ты указываешь и используешь в программе, в явном или неявном виде.

> достаточно откомпилтровать пустышку в виде формы и используя только Forms.
это уже не пустышка если используется целый Forms... + все что использует он (апликейшн и т.д.).
пустышка это
begin
end.

в dpr. достаточно проверить и убедиться, не так уж там и много "лишнего".


 
Германн ©   (2008-07-20 01:18) [13]


> sniknik ©   (20.07.08 01:05) [12]

В принципе можно кое-что выбросить. И Борланд (Код Жира) что-то делают в этом направлении.
Меня приятно удивило, что размер EXE-шника в BDS2006 стал меньше, чеи в Д6. Но это такие копейки, что и говорить не стоит.


 
korneley ©   (2008-07-20 09:36) [14]


> Германн ©   (20.07.08 01:18) [13]
> > sniknik ©   (20.07.08 01:05) [12]В принципе можно кое-
> что выбросить. И Борланд (Код Жира) что-то делают в этом
> направлении.Меня приятно удивило, что размер EXE-шника в
> BDS2006 стал меньше, чеи в Д6. Но это такие копейки, что
> и говорить не стоит.

 Меня тоже удивило, но в другом, и приятно :) У меня "соседи" просто, ничего дополнительно не оптимизируя, откомпилировали "расчётный" проект в BDS2006. Код, правда, стал чуть-чуть "пожирнее", но считает почему-то, раза в полтора быстрее, по сравнению с тем же, но из-под D7. Я считаю, неплохой компромисс.


 
User   (2008-07-20 10:12) [15]

> sniknik ©   (20.07.08 01:05) [12]
- согласен с тем, что непрафильное наименование "пучтышка" - "пустая форма" точнее ...
- не совсем согласен с тем, что включается только нужное (см. первую часть > User   (20.07.08 00:33) [9]).
как вариант "борьбы" с ООП - переделка (подточка) классов под реальный проект - например, для "пустой формы" убрать "лишнее" из TCustomForm (TForm) ...


 
Palladin ©   (2008-07-20 12:24) [16]

Что"то непойму. Вам это, так называемое, "лишнее" спать не дает?


 
User   (2008-07-20 12:40) [17]

> Что"то непойму. Вам это, так называемое, "лишнее" спать
> не дает?
- иногда ..., бывает снится ;-)
Если быть точнее - это "подкоп" в сторону защищенности (здесь не хотелось подымать данную тематику) ...


 
sniknik ©   (2008-07-20 16:48) [18]

ну, тогда совет
не используй ООП, т.к. наследуясь от обьекта ты включаешь его "лишний" код (/ресурсы) в программу,
советовали KOL, тоже не используй, наверняка там тоже лишнее есть (ООП используется, значит есть),
не используй модули, и не дай бог не вкладывай их друг в друга, т.к. просто прописав их в uses ты можеш включить "лишний" код из них (или часть) в свою программу (смотря что там в его инициализации прописано),
не используй dll (не говоря уже о COM/ActivX), т.к. всего изза одной функции загружается целая библиотека/обьект,
не используй winapi, т.к. вызывая какуюнибудь функцию из него нет уверенности, что ней не используется вызовы других "лишних" функций из него самого (даже наоборот есть гарантия, т.к. процедурный подход подразумевает писать код в одном месте, и использовать где понадобиться)...

дельфи можно использовать исключительно как компилятор, убрав(переписав) предварительно обязательные модули (system и еще какойто, не помню...), лучше всего на пустышки (добьешся полной "нерабочести" программы, зато ничего "лишнего")...

и еще подумай об операционной системе... она то не лишняя случаем?

пиши все сам! и лет так через 10-20 мы увидим, может быть, жутко устаревшее творение, но без "лишнего" кода. да и то вряд ли, т.к. сам будеш повторятся в конце концов, и наплодишь теперь уже действительно лишнего кода.


 
User   (2008-07-20 18:07) [19]

... перегиб 8-|


 
Тын-Дын ©   (2008-07-20 19:09) [20]


> User   (20.07.08 18:07) [19]
> ... перегиб 8-|


Желание выкинуть всё "лишнее" может возникнуть только лишь от безделья.
В том случае, когда необходимо достижение конечной цели - разработка продукта с нужной функциональностью, времени заниматься ерундой просто нет.


 
Игорь Шевченко ©   (2008-07-20 21:03) [21]

это хорошо, когда у народа есть лишнее время. оно его побуждает. но автор рано остановился - он пошел спрашивать на форуме вместо того, чтобы попытаться что-то сделать самому и доложить результаты.


 
User   (2008-07-20 22:25) [22]

> но автор рано остановился - он пошел спрашивать на форуме
> вместо того, чтобы попытаться что-то сделать самому и доложить
> результаты.

что я должен был сделать и о каких результатах я должен был докладывать?


 
Плохиш ©   (2008-07-20 23:07) [23]


> User   (19.07.08 23:07)  
> Не секрет, что компилятор Delphi в результирующие файлы
> впихивает все, что надо и, что самое неприятное, что не
> надо.

Враньё, дальше читать смысла нет.


 
Тын-Дын ©   (2008-07-20 23:32) [24]


> Враньё, дальше читать смысла нет.


С чего бы это?


 
Тын-Дын ©   (2008-07-20 23:53) [25]


> User   (19.07.08 23:07) 


Решение простое:
1. Переписываешь классы VCL, включая в код только нужную функционаольность.
2. Классы пишешь так, чтобы можно было их настраивать - опять же выбирать функциональность.

Например

program Project;

//uses
//interface
type
 TVCLClass1=class(TObject)
{$IFDEF param1}
    FVCLObj1: String;
{$ENDIF}
{$IFDEF param2}
    FVCLObj2: String;
{$ENDIF}
 public
{$IFDEF param1}
    constructor Create;
{$ENDIF}
{$IFDEF param2}
    constructor Create;
{$ENDIF}
 end;

{ TVCLClass1 }

{$IFDEF param1}
constructor TVCLClass1.Create;
begin

end;
{$ENDIF}
{$IFDEF param2}
constructor TVCLClass1.Create;
begin

end;
{$ENDIF}

begin
end.


3. При компиляции любого проекта устанавливаешь нужные параметры
4. Наслаждаешься.

PS.
Не забудь про такие вещи как исключения, обработка ошибок, многопоточность и пр.


 
User   (2008-07-21 00:41) [26]

> Плохиш ©   (20.07.08 23:07) [23] - не вопрос, кому что надо ...

> 1. Переписываешь классы VCL, включая в код только нужную
> функционаольность.
- в большинстве случаев я так и делаю, правда не глубоко копаю ...

... близко к теме, если кому интересно, нашел XN Resource Editor (www.wilsonc.demon.co.uk/d10resourceeditor.htm) - содержатся исходники - можно поразбираться. Единственное - просматриваются только ресурсы РЕ-файлов, и не нашел один юнит (ExVirtualStringTree) ...


 
Amoeba ©   (2008-07-21 00:58) [27]


> User   (21.07.08 00:41) [26]

Это точно: лишнего времени у нас в избытке.


 
Loginov Dmitry ©   (2008-07-21 07:59) [28]

> если кому интересно, нашел XN Resource Editor


ресурсы кушают место горазно меньше, чем "мертвый" код, посему бесполезно.
Забей на это. Или юзай KOL. Проще забить, имхо.


 
Anatoly Podgoretsky ©   (2008-07-21 08:43) [29]

> Loginov Dmitry  (21.07.2008 7:59:28)  [28]

Неиспользуемые в данный момент ресурсы едят место только на диске, на систему нагрузка нулевая.


 
Ega23 ©   (2008-07-21 09:54) [30]

Везёт некоторым...
На такую дурь время есть...


 
Anatoly Podgoretsky ©   (2008-07-21 09:56) [31]

Лишь бы не работать!


 
brother ©   (2008-07-21 09:57) [32]

Вот точно, людям время некуда девать...


 
Игорь Шевченко ©   (2008-07-21 11:57) [33]

Вот между прочим - несколько лет назад столкнулся с проблемой - программы, скомпилированные на Delphi 6 не хотели работать на NT4 без определенного сервис-пака. Потому что в их недрах были вызовы к oleaut32.dll (если мне память не изменяет), для работы программы даром не нужные, но тем не менее, явно слинкованные.
Пришлось делать патч, перебивать имена в секции импорта на oleaut33.dll и пустую dll-ку с нужными функциями рядом класть.

Так что исследование внутренностей не всегда является пустой тратой времени.


 
brother ©   (2008-07-21 12:00) [34]

> Так что исследование внутренностей не всегда является пустой
> тратой времени.

трудовая необходимость )


 
Anatoly Podgoretsky ©   (2008-07-21 12:35) [35]

> Игорь Шевченко  (21.07.2008 11:57:33)  [33]

А мне кажется разработчик лоханулся :-)
Не так ли?


 
Игорь Шевченко ©   (2008-07-21 13:18) [36]

Anatoly Podgoretsky ©   (21.07.08 12:35) [35]

Э...любая программа, скомпилированная на D6 не работала без SP4. Даже begin..end :)

Впрочем, разработчиком и пользователем был я, поэтому взаимные претензии были урегулированы.


 
Anatoly Podgoretsky ©   (2008-07-21 15:02) [37]

> Игорь Шевченко  (21.07.2008 13:18:36)  [36]

> Впрочем, разработчиком и пользователем был я, поэтому взаимные претензии были урегулированы.

Надо было в системных требованиях указать SP6a


 
Игорь Шевченко ©   (2008-07-21 15:13) [38]

Anatoly Podgoretsky ©   (21.07.08 15:02) [37]


> Надо было в системных требованиях указать SP6a


А толку-то ? Не было у меня на тот момент даже SP4 не говоря о SP6a...После войны с очередным линуском удалось взгромоздить NT4 SP1 и все :)


 
Германн ©   (2008-07-22 01:05) [39]


> Игорь Шевченко ©   (21.07.08 13:18) [36]
>
> Anatoly Podgoretsky ©   (21.07.08 12:35) [35]
>
> Э...любая программа, скомпилированная на D6 не работала
> без SP4. Даже begin..end :)
>
>

Эээ. А может разработчики NT тоже виноваты? Может они забыли принцип совместимости снизу вверх?


 
Игорь Шевченко ©   (2008-07-22 09:46) [40]


> Эээ. А может разработчики NT тоже виноваты? Может они забыли
> принцип совместимости снизу вверх?


Borland виноват - напихал, понимаешь, всяких вызовов ненужных


 
Германн ©   (2008-07-22 14:24) [41]


> Borland виноват - напихал, понимаешь, всяких вызовов ненужных

Но ведь - "Чтобы продать что-нибудь ненужное, надо сначала купить что-нибудь ненужное". (с)


 
User   (2008-07-22 14:39) [42]

> Игорь Шевченко ©   (20.07.08 21:03) [21]
докладываю результаты: при компиляции "... with runtime packages" файлик пустой формы занимает 18 432 байта и из ресурсов только RCData и иконка (накидывание всяких элементов на форму раздувает только TFORM1, включение ресурсов по {$R х.res} добавляет этот ресурс), все необходимое находится в rtlx.bpl и vclx.bpl ...

... включение хоть всех юнитов в uses никак не скажется на объемах, ресурсах и тд. откомпилированного файла, если они не используются в программе ...

... по поводу проведения свободного времени - кому как нравится (у меня Delphi как увлечение, т.к. моя работа не связана с программированием), хуже если его совсем нет ...


 
Loginov Dmitry ©   (2008-07-22 17:33) [43]


> ... включение хоть всех юнитов в uses никак не скажется
> на объемах, ресурсах и тд. откомпилированного файла, если
> они не используются в программе ...


скажется. Во многих юнитах есть секция initialization.


 
Тын-Дын ©   (2008-07-22 19:48) [44]


> User   (22.07.08 14:39) [42]


И какие выводы?


 
User   (2008-07-23 10:18) [45]

WinAPI ...


 
Тын-Дын ©   (2008-07-23 12:08) [46]


> User   (23.07.08 10:18) [45]
> WinAPI ...


Тогда зачем Delphi?


 
User   (2008-07-23 12:11) [47]

Перефразирую, WinAPI посредством Delphi ;-)


 
Тын-Дын ©   (2008-07-23 12:17) [48]


> User   (23.07.08 12:11) [47]
> Перефразирую, WinAPI посредством Delphi ;-)


Ну если есть необходимость в каких-то системных задачах и куча времени, то почему бы нет?


 
Anatoly Podgoretsky ©   (2008-07-23 12:29) [49]

> Тын-Дын  (23.07.2008 12:17:48)  [48]

WinAPI предназначет для решения абсолютно любых задач, хоть Hello World, а не только системных.
Какое средство, программирования с  WinAPI, уберет вот это - куча времени


 
Тын-Дын ©   (2008-07-23 13:10) [50]


> Anatoly Podgoretsky ©   (23.07.08 12:29) [49]
> > Тын-Дын  (23.07.2008 12:17:48)  [48]
>
> WinAPI предназначет для решения абсолютно любых задач, хоть
> Hello World, а не только системных.
> Какое средство, программирования с  WinAPI, уберет вот это
> - куча времени


WinAPI для любых задач. но почему мы не пишем прикладные задачи для работы с БД на Assembler и WinAPI?


 
Anatoly Podgoretsky ©   (2008-07-23 13:43) [51]

> Тын-Дын  (23.07.2008 13:10:50)  [50]

Я не призываю, а обращаю внимание на недостатки твоих тезисов.
Ассемблерб а нафига Паскаль, когда есть TASM
Так вот после выхода TP 6 я полностью отказался от использования TASM, хотя писал именно системные вещи, в первую очередь драйвера.
Так же и здесь, зачем отказываться от Дельфи, что бы писать на WinApi - инструмент удобен и для этой работы тоже. Вот если писать драйвера режима ядра, то выбор Дельфи мягко скажем очень смущает, или спецАПИ, для которого не портированы заголовки.



Страницы: 1 2 вся ветка

Текущий архив: 2008.08.31;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.016 c
2-1216929349
mephisto
2008-07-24 23:55
2008.08.31
Динамические фреймы


3-1204722118
Ega23
2008-03-05 16:01
2008.08.31
Оптимизация запроса - правильно ли я понимаю?


15-1215766185
ekto
2008-07-11 12:49
2008.08.31
Создать класс или обойтись процедурками.


2-1216836336
Newser
2008-07-23 22:05
2008.08.31
Как передать данные из одной БД Access в другую? (патч)


8-1184845330
Oberon
2007-07-19 15:42
2008.08.31
как разрезать картинку?