IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Замена системных модулей для 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 раз(а)



Как говорится, писал для себя, но думаю, пригодится и другим.

grompe.org.ru/files/delphisys.rar — Устарело, см. ниже

Если у вас чистый проект на Delphi, в котором используется только WinAPI, и по минимуму всяких встроенных функций языка, то большой шанс, что программу можно сократить примерно на 10 кб, используя эту замену системных модулей.


Пропатченный компилятор от Delphi 7 — DCC32HACK, нацеленный на минимальный размер WinAPI программ,
а также обновленная замена системных модулей внутри.

http://grompe.org.ru/files/dcc7hack.rar
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
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
А вот если их компилятор научился нормально константы выносить и при этом не генерировать код хуже чем был - то я только рад буду.

А можешь конкретный текст программы привести, чтоб на нём разницу посмотреть?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Mar 24 2012, 18:59
Сообщение #3


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Нафиг тогда такого монстра.

QUOTE(Grom PE @ Mar 24 2012, 15:47) *
А можешь конкретный текст программы привести, чтоб на нём разницу посмотреть?


Запросто - посмотри сколько раз в .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';

Тогда она не дублирует...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 29th April 2024 - 06:11