Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
ВнизО результате трудов - откомпилированных файлах ... Найти похожие ветки
← →
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 виноват - напихал, понимаешь, всяких вызовов ненужных
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.008 c