четверг, 17 марта 2011 г.

Размышления о размере исполняемых файлах

Очень часто на форумах можно встретить нелестные отклики о размере исполняемого файла, который создаётся при компиляции VCL-проекта в Delphi. Особенно это популярно у начинающих программистов, а также встречается и у противников Delphi.

Действительно, пустой проект с одной формой в Delphi7 – это 361 Кб исполняемого exe-файла (и чем выше версия Delphi, тем больше размер).

В литературе, да и на форумах тоже, часто пишут, что мол вот оно так, ибо объектный код, неизвестно, будет ли он использоваться приложением, или нет… И тут же пишут, мол хотите малый объём exe-файла – используйте чистый WinAPI без всяких VCL. Ну ещё иногда вспоминают библиотеку KOL.

На сегодня моё мнение по этому поводу наиболее близко с тем, как его описал Александр Алексеев. Однако когда я только начинал программировать на Delphi под Windows, лет 10 назад, тогда я и сам задумывался над этим вопросом (всё-таки на дискету в 1.4 мегабайт много не положишь, да и модемное соединение было очень не стабильным). И вот где-то в 2001 году я провёл такое небольшое исследование.

Взял Delphi 5, создал проект – форму с кнопкой, по клику на которую выводится текстовое сообщение. И взял подобный проект на Microsoft Visual C++ (к сожалению уже не помню какая то была версия) с использованием MFC.

С настройками по умолчанию проект на MVC занимал почти раз в 10 меньше… Скопировав оба проекта на отдельный раздел (диск) и перезагрузившись под чистую установку Windows 95 (которая у меня была оставлена для тестов совместимости), я был приятно удивлён – VCL приложение запустилось без проблем, а вот MFC приложение ругнулось, мол не хватает такой-то DLL-ки. И тогда я всё понял.

Поперезагружавшись несколько раз туда-сюда, я составил список dll, необходимых для простого MFC-проекта.

А дальше я сделал очень простую штуку. Поставил флаг “Build with runtime packages” в опциях проекта Delphi. И VCL приложение тоже стало занимать примерно в 10 раз меньше. Т.е. размер исполняемого файла на Delphi, стал соизмерим с размером с исполняемым файлом на MVC. Ну и тоже поперезагружавшись несколько раз туда-сюда, мне без труда удалось составить список bpl-пакетов, необходимых для запуска VCL приложения.

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

В итоге у меня получилось 4 каталога: 2 для VCL и 2 для MFC. Одна версия – всё в одном exe, вторая версия – exe с использованием библиотек. Естественно, что вторая версия (exe + dll/bpl) занимали чуть больше дискового пространства. Но если в рамках какого-то проекта поддерживать несколько приложений, то этот вариант будет более выгодным.

К сожалению я уже не помню точно размеры этих файлов, и не могу сказать, кто победил. Помню лишь, что в одной версии (всё в одном exe) вперёд вырвался один проект (вроде это был VCL), а в другой версии – наоборот. При этом разница в размерах файлах была на столько мала, что этой разницей можно было пренебречь и сказать: ребята – ничья.

 

P.S.: Если у вас есть время и возможность – повторите этот эксперимент. Интересно будет узнать, как дела с размерами файлов обстоят на сегодня (желательно взять самые последние версии сред разработки).

P.S.S.: В те времена у меня был довольно старенький на 2001 год компьютер, с кнопкой Turbo :), и тактовой частотой 133/166 МГц. И визуально можно было заметить, что проекты версии “всё в одном” запускаются быстрее, чем версии с использованием библиотек.

4 коммент.:

GunSmoker комментирует...

Я такой эксперимент тоже лет восемь что-ли назад проводил. Только для MFC я попросил знакомого сишника скомпилить - ну чтобы самому чего не напортачить от незнания. Получилось около 2 Мб.

Чорны кашак комментирует...

У меня эти вопросы решались с нашими сишниками еще в прошлом веке :) Тоже пришлось показывать, что если в винду вместо MFC закинуть VCL, то exe-шник от Delphi будет не больше exe-шника от VS. Только не в размере дело, а в удобстве разработки ПО.

jk комментирует...

только mfc библиотеки есть на каждом компе, а vcl-ые все равно с собой таскать надо
и получается если на mfc можно смело использовать динамическую линковку - и иметь размер екзешника маленький, то при использовании такого в дельфи - ощутимый проигрыш будет в размере инсталятора (и возможно в дополнительных глюках когда вдруг эти дллки не так установятся и не будут подгружаться)

Unknown комментирует...

Только сейчас это уже не важно.

Отправить комментарий

.

.