Замена системных модулей для Delphi, Уменьшим размер WinAPI приложений на 9-11 кб. |
Добро пожаловать, гость ( Вход | Регистрация )
Замена системных модулей для Delphi, Уменьшим размер WinAPI приложений на 9-11 кб. |
Grom PE |
Nov 7 2007, 01:15
Сообщение
#1
|
Advanced Member Группа: CTPAX-X Сообщений: 84 Регистрация: 7-February 08 Из: i@grompe.org.ru Пользователь №: 3,120 Спасибо сказали: 95 раз(а) |
Как говорится, писал для себя, но думаю, пригодится и другим.
Если у вас чистый проект на Delphi, в котором используется только WinAPI, и по минимуму всяких встроенных функций языка, то большой шанс, что программу можно сократить примерно на 10 кб, используя эту замену системных модулей. Пропатченный компилятор от Delphi 7 — DCC32HACK, нацеленный на минимальный размер WinAPI программ, а также обновленная замена системных модулей внутри. http://grompe.org.ru/files/dcc7hack.rar |
Grom PE |
Mar 24 2012, 15:47
Сообщение
#2
|
Advanced Member Группа: CTPAX-X Сообщений: 84 Регистрация: 7-February 08 Из: i@grompe.org.ru Пользователь №: 3,120 Спасибо сказали: 95 раз(а) |
Пустая VCL форма теперь 1 307 136 байт.
EXE-шники компилирует с Bound Imports, Delay Imports, и версией ОС 5.0. Строки по умолчанию записываются в юникоде. Там некоторые демки не то, что не под Win98, Windows 7 требуют! Хотя если пошаманить и писать на чистом WinAPI, можно использовать unicows.dll под Win98, править версию ОС в заголовке и будет работать. Вроде обещают, что кодогенератор сделали лучше, то есть возможно улучшение производительности, если перекомпилировать WinAPI-шные программы. А ещё они наконец-то научили Delphi MS COFF .OBJ понимать, теперь Delphi будет менее замкнутым, можно линковать с FASM'ом, например. Какую выгоду приносят Bound Imports и Delay Imports, я так и не понял. На пару секунд ускоряют время загрузки VCL-монстра с тонной импортов? =) QUOTE А вот если их компилятор научился нормально константы выносить и при этом не генерировать код хуже чем был - то я только рад буду. А можешь конкретный текст программы привести, чтоб на нём разницу посмотреть? |
-=CHE@TER=- |
Mar 24 2012, 18:59
Сообщение
#3
|
Walter Sullivan Группа: Root Admin Сообщений: 1,355 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 311 раз(а) |
Нафиг тогда такого монстра.
А можешь конкретный текст программы привести, чтоб на нём разницу посмотреть? Запросто - посмотри сколько раз в .EXE файле будет встречаться строчка, если раскоментарить define для STDWAY: CODE Program test; {$APPTYPE CONSOLE} Uses Windows; {.$DEFINE STDWAY} Const {$IFDEF STDWAY} S = '.\test.ini'; {$ELSE} S: String[11] = '.\test.ini'#0; {$ENDIF} Procedure test1; Begin WritePrivateProfileString('name', 'test1', 'value1', {$IFDEF STDWAY} PChar(S) {$ELSE} PChar(@S[1]) {$ENDIF} ); End; Procedure test2; Begin WritePrivateProfileString('name', 'test2', 'value2', {$IFDEF STDWAY} PChar(S) {$ELSE} PChar(@S[1]) {$ENDIF} ); End; Begin test1; test2; WritePrivateProfileString('name', 'main', 'value3', {$IFDEF STDWAY} PChar(S) {$ELSE} PChar(@S[1]) {$ENDIF} ); End. Добавлено: Хм. А если объявлять как: CODE Var S: String = '.\test.ini'; Тогда она не дублирует... |
Упрощённая версия | Сейчас: 21st June 2024 - 13:38 |