Дата: Воскресенье, 08.02.2015, 07:28 | Сообщение # 1
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
Всем Hi. Итак, до вчерашнего для работал в XE, все гуд. Сегодня поставил XE3, стал компилировать один и тот же код. Почему в XE мой exe весил 840kb, а в XE3 1,63mb ??? Я сильно разочарован... Может есть возможность сделать его меньше, без упаковщиков? Может где-то можно настроить это? mr.toorook@jabber.ru
Сообщение отредактировал toorook - Воскресенье, 08.02.2015, 07:28
Дата: Воскресенье, 08.02.2015, 18:40 | Сообщение # 2
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Скомпилируй в Лазарусе, удивись. Будет ~15 метров ) Это просто компилятор килотонны говна вставляет, например, отладочную информацию. В настройках надо смотреть. Pascal, C\C++, Assembler, Python
Дата: Воскресенье, 08.02.2015, 20:58 | Сообщение # 3
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
toorook, как вариант облегчить системные юниты) тема тут несколько раз эта поднималась. занятие достаточно затратное по времени, особенно если пустые юниты вообще юзать, узнаешь много нового) например работы со строками там нет) приходится описывать выделения памяти вручную. ну и прочие извращения. ICQ: 41896
{$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
и настройки
и статья
УМЕНЬШЕНИЕ РАЗМЕРА *.EXE ФАЙЛА В DELPHI
Многие Delphi программисты да и простые пользователи знают, что можно уменьшить размер exe файла, не используя упаковщики и не изменяя функциональность, путём удаления из exe таблицы релокаций. Обычно для этого используют сторонние утилиты и специальные программы. Например StripReloc от Джордона Рассела. УМЕНЬШЕНИЕ РАЗМЕРА ФАЙЛА *.EXE В СРЕДЕ ПРОГРАММИРОВАНИЯ DELPHI
В данном совете ПО мы откроем страшную тайну. В среде программирования Delphi 2006 и выше, релоки можно не удалять, а просто не создавать! Так в Delphi 2006 появилась недокументированная директива компилятора {$SETPEFLAGS}. Она позволяет настроить несколько тонких моментов создания нашего бинарника. В первую очередь она интересна тем, что позволяет отключить создание таблицы релокаций. Обратите свое внимание! Не отключайте таблицы релокаций в dll, bpl и др. файлах. Таблица релокации не нужна exe файлу, т.к. он всегда грузится по одному и тому же адресу. Использование директивы {$SETPEFLAGS} очень простое: Откройте файл проекта (dpr) В uses добавьте Windows Ниже пропишите {$SETPEFLAGS IMAGE_FILE_RELOCS_STRIPPED} Попробуйте скомпилировать файл в Delphi до добавления этой директивы и после. Вы сами сможете убедиться, что размер exe уменьшился. В дополнение хотим сказать, что использование SETPEFLAGS этим не ограничивается. У неё есть ещё масса интересных возможностей. Получить их полный список очень просто: Просто откройте модуль Windows Найдите в нём поиском IMAGE_FILE_RELOCS_STRIPPED Нашли? Ниже идёт целый список констант, начинающихся с IMAGE_FILE_ Справа идёт комментарий. Для включения нескольких инструкций, используйте or. Вот небольшой пример: {$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP} Что я здесь сделал? IMAGE_FILE_RELOCS_STRIPPED - отрезали релоки IMAGE_FILE_DEBUG_STRIPPED - убрали из ехе Debug информацию IMAGE_FILE_LINE_NUMS_STRIPPED - убрали из exe информацию о номерах строк IMAGE_FILE_LOCAL_SYMS_STRIPPED - убрали local symbols IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP - При запуске exe с компакт-диска, флэш накопителя, других извлекаемых из персонального компьютера устройств, считать exe в свап и запустить оттуда. Полезно, если нужно запустить программу с компакта, а потом попросить вставить другой... IMAGE_FILE_NET_RUN_FROM_SWAP - аналогично предыдущей, только для сетевых дисков. 618">
{$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
Спасибо с этим директивами размер уменьшился на ~150kb Я поставил обратно XE, снес к чертям XE3. Переписал некоторые процедуры на WinAPI. Ужал UPX, кстати без галки "носильное сжатие", выдавало ошибку. Ругался на try... exec. Итого вес = 202kb. Устраивает))) Всем спасибо! mr.toorook@jabber.ru
Дата: Воскресенье, 20.12.2015, 13:57 | Сообщение # 9
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
Этот код, скомпилированный в XE5 весит 6 мегабайт, а в 7 - 192 КБ. 192 КБ!!!! КАРЛ!!!!
Код
program Project1; uses SysUtils, idirc; var irc1:TIdIrc; begin irc1:=TIdIrc.Create(nil); irc1.Nick:='testNick'; irc1.Host:='*-*****'; irc1.Port:=6667; sleep(20000);
{ TODO -oUser -cConsole Main : Insert code here } end.
Ибо маст дай!
Сообщение отредактировал tatsu - Воскресенье, 20.12.2015, 13:58