Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 251

/ вопрос открыт /

Приветствую, уважаемые эксперты!

Почему полученная программа такая большая (450 Кб)?

Приложение:
  1. program Project1;
  2.  
  3. uses
  4. Windows,
  5. messages,
  6. KOL;
  7.  
  8. var
  9. form:PControl;
  10. begin
  11.  
  12. run(form);
  13. end.


Фамилия Имя Отчество Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 1 января 2008, 23:36
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Emfs!
Скачал библиотеку КОЛ отсюдова http://kolmck.net/kol.zip. распаковал. туда же кинул и ваш файл. потом создал батфайл с текстом
dcc32 Project.dpr - для компиляции с консоли. после компиляции получил 24 килобайта.
Попробуйте так. Хотя большой размер может указывать на то, что случайно был подключён модуль Classes или Forms.
Позже я попробывал скомпилировать с под делфи - результат тот же - 24 кило (24 576 байт)
З.Ы. Делфи - 2007, с декаберским обновлением, WinXP

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 2 января 2008, 00:10


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 5 января 2008, 20:42; участников в обсуждении: 2.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 4 января 2008, 13:52 [#1]:

Попробовал сделать как Вадим К посоветовал, но тот же размер получается.

Далее поставил "Build with runtime packages" во вкладке "Packages" в опциях проекта и размер программы стал 60 Кб. Но это всё равно не 24.

Почему?

Delphi7, kol_mck (2.80 [19 сентября 2007г.]).
Вадим К

Вадим К (статус: Академик), 4 января 2008, 18:57 [#2]:

Цитата:


Далее поставил "Build with runtime packages" во вкладке "Packages" в опциях проекта и размер программы стал 60 Кб

Вполне нормально, если бы не KOL. Значит что то делаете не так. Что именно - я не телепат, не могу угадать. как вариант - попробуйте заархивировать папку с проектом и выложить где нибуть - я попробую поиследовать. Чувствуется мне, что где то в настройках что то залезло. Может какой-то эксперт шалит или пакет компонентов.
Галочка "подтверждения прочтения" - вселенское зло.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 5 января 2008, 06:28 [#3]:

Выложил архив проекта
http://emfs.narod.ru/archive.7z

Объясните, пожалуйста, на что влияет опция "Build with runtime packages".

Скомпилировал с включенной опцией KOL проект получилось примерно 60 Кб.
Скомпилировал пустой VCL проект - получилось 16 Кб.

Какие ограничения появляются у VCL приложения с этой опцией?
Вадим К

Вадим К (статус: Академик), 5 января 2008, 15:09 [#4]:

Если бы вы посмотрели на скомпилированные приложения изнутри, то заметили, что в них есть много одинакового кода, который кстати часто лежим мёртвым грузом, но линковщик не всегда может удалить их. Да, да килобайты кода, а удалить его нельзя, так как линковщик не может с уверенностью сказать, нужен ли каждый кусок кода. Всему виной - RTTI и классы. Они предоставляют вам то удобство кодирования и разработки. Тоесть, за всё приходиться платить.
Но повторяющийся код можно вынести в dll. Только Борлан создала dll с некоторыми правилами и дала расширение bpl. Тоесть bpl - это dll, просто оформленна по специальным правилам.
Если посмотреть в папку windows, то найдёте там множество файлов с расширением bpl.
Вот когда галочка "Build with runtime packages" отмечена, то в выполняемый файл не линкуется весь код, который есть в bpl (в пакете) - в результате в exe остаётся только код для инициализации форм, сами формы, обработчики. ну и разный нагрузочный код+данные, которые необходими для любого приложения, даже написаного на асме.
Для минимального приложения собраного с пакетами нужно кажись 3 bpl файла общим размером чуть больше мегабайта. Почему так много? всё таки линковщик своё дело знает и достаточно много кода лишнего удаляет.
Поэтому, если делается большой проект - то есть смысл использовать пакеты - сумарный размер уменьшиться.

А теперь пару "секретов":)
C++Builder по умолчанию использует пакеты, поэтому и размер выполняемого файла и равен 40-50 килобайт. Когда галочка снимается (там надо ещё одну галочку снять для версий с 2005 начиная), то размер стаёт на свои законные 400-500 килобайт. и приложение может работать на тех компьютерах, где не установлен билдер ( на самом деле там, где нет bpl:), но не будем расстраивать любителей си)
И второе. По поводу Microsoft Visual C++. Якобы он генерирует маленький код. там тоже используются пакеты:) Только они ховаются в длл, которые заведомо поставляются с операционной системой. там это дело называется статическая и динамическая линковка. И вот, если использовать статическую линковку, то размер кода увеличивается до 300 и больше килобайт.
Но всё было хорошо и головы многих программеров были удачно одурманены, пока не вышел VS2005. Теперь приложения не хотели работать на компьютерах без VisualStudio2005. Ничего интересного не находим? И Майкрософт как всегда подсуетился и "предложил решение" - скачайте мол пакет для распространения специальный - а внутри этого пакета просто кучка длл и маленькое приложение, которые в реестре несколько записей сделает. Вот и верь теперь Майкрософту...

А теперь по поводу вашего примера. Скачал, распаковал туда библиотеку kol и создал маленький бат файл (просто создайте текстовый файл и переименуйте его в compil.cmd) с следующим текстом

dcc32 Project1.dpr
pause

и сохранив, запустил его двойным кликом. Правда так как были включены пакеты выполнения, то я удалил файлы с расширением dof и cfg.
И размер стал 24 кило.
Попробуйте сделать именно так.
Галочка "подтверждения прочтения" - вселенское зло.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 5 января 2008, 15:38 [#5]:

Спасибо, Вадим, за такой развёрнутый ответ.

Т.е на Windows-системах приложения, созданные в С++билдере до версии 2005, будут работать, а борландовские программы - нет, если нет соответствующих bpl?

А для KOL-программ таких ограничений нет получается?
Вадим К

Вадим К (статус: Академик), 5 января 2008, 17:09 [#6]:

С++билдер - это борландовский продукт:) Точнее теперь уже дочернего борландовского предприятия - кодегир (codegear.com).
Для билдера если галочку снять, то работать всё будет.
С майкрософтовскими продуктами - VS6 и VS2003 использовали dll, которые есть в Windows XP по умолчанию.
В целом политика Майкрософта понятна - переманить на сторону Сишарпа. Но рекламируемый фреймворк - это теже пакеты (bpl) только чуть лучше(хотя нет, значительно хуже, но это мое мнение) подработаты напильничком. Да и у делфи, билдера, .NET FrameWork, C# один разрабочик:) - Хейлсберг Андерс - поэтому всё хорошо стает на свои места:)

А для кол программ нет таких ограничений - они используют имеющиеся в системе длл, особо не привязываясь к их версиям. Тут уже больше от компиялора зависит - например компилятор от делфи 2007 генерирует код, который на Windows 98 уже не работает, хотя это и к лучшему - можно использоваться приимущества, которые даёт технология НТ и Windows 2000 и XP.
Галочка "подтверждения прочтения" - вселенское зло.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 5 января 2008, 20:34 [#7]:

Надо KOL поучить выходит, чтобы получать маленький размер программ. Какие материалы посоветуете?
У меня есть несколько статей для KOL, но по сравнению с объёмом материала по тому же VCL - это очень мало.
Вадим К

Вадим К (статус: Академик), 5 января 2008, 20:42 [#8]:

Материалы? зайдите на сайт этой библиотеки. там достаточно есть. Также можно скачать "учебник" от создателей по следующей ссылке http://kolmck.net/docs/KOLBook.rar
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.