Сравнение минимального размера EXE в разных версиях PureBasic
Провёл небольшой эксперимент и решил поделиться результатами.
Тестовая программа:
Компиляция выполнялась x86-компилятором со стандартными настройками.
Результаты:
Версия PB Размер EXE
3.40 4128 байт
4.20 4608 байт
5.70 4608 байт
5.72 LTS 4608 байт
6.40 207872 байт
Также проверил программу:
Размер в PB 6.40 составил 209408 байт, то есть всего на 1536 байт больше, чем пустой End.
Это означает, что основной объём занимает не GUI и не код программы, а базовый runtime, который подключается уже для пустого приложения.
Дополнительно был исследован PE-заголовок.
В PB 6.40 появились:
секция .tls;
TLS Directory;
значительно больше импортируемых функций WinAPI;
кодовая секция .text около 139 КБ даже для программы из одного End.
В версиях 3.x–5.x ничего подобного нет, а минимальный размер EXE остаётся около 4–5 КБ.
Для сравнения взял свой старый проект 2007 года (PB 4.20). Программа содержала встроенные ресурсы:
11 WAV-файлов;
несколько BMP;
JPG;
иконки.
Размер готового EXE составлял всего 79360 байт сжатым UPX (581 кб не сжатый).
Получается довольно любопытная картина:
PureBasic 3.x–5.x создаёт чрезвычайно компактные EXE.
Начиная с ветки 6.x минимальный размер пустой программы вырос примерно до 200 КБ.
Рост связан не с кодом пользователя, а с изменением внутреннего runtime компилятора.
Если кто-то знает официальную причину такого увеличения размера между 5.72 и 6.x, было бы интересно услышать комментарии.