Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1215818767
Kostafey
2008-07-12 03:26
2008.08.31
С днем рождения ! 12 июля


15-1215691880
zinetz_victor
2008-07-10 16:11
2008.08.31
Как увеличить приоритет для flash activeX?


6-1192630512
JanMihail
2007-10-17 18:15
2008.08.31
Как узнать, удачно ли завершился запрос?


15-1215263672
Fredy314
2008-07-05 17:14
2008.08.31
Вычисление crc32 по частям


15-1215750791
shlst
2008-07-11 08:33
2008.08.31
А чего это дедушки волнуются -





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский