|
Вопрос # 1 251/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Почему полученная программа такая большая (450 Кб)?
 |
Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 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
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|