Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уменьшение размера программ 
V
    Опции темы
Alexeis
Дата 16.3.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Snowy, это на delphi 2006 ??
Добавлено @ 13:44
так это наверное модуль system урезан до предела?
Чесно говоря в нем разобраться непросто smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @ 16.3.2006, 13:41 Найти цитируемый пост)
Snowy, это на delphi 2006 ??
Нет конечно. Родная 7-ка - на ней самые маленькие неVCL файлы делаются.

Цитата(alexeis1 @ 16.3.2006, 13:41 Найти цитируемый пост)
так это наверное модуль system урезан до предела?
Он там вообще отсутствует smile

Цитата(alexeis1 @ 16.3.2006, 13:41 Найти цитируемый пост)
Чесно говоря в нем разобраться непросто
и не нужно. Нужно убрать все, а потом добавлять потихоньку все, чего не хватает.
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Что вообще утежеляет модуль system?
Сознание новых типов утяжеляет проект или нет ?(если они не используются)
В этом смысле функции и константы не должны вроде.
Глобальные переменные точно должны.
Не использованные классы утяжеляют или нет?

Раздел инициализации и финализации явно нужно переработать.

Как всето таки его правельно резать чтобы лишнее (не утяжеляющее) не трогать?
Добавлено @ 13:56
А как можно удалить вообще системные модули smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
Что вообще утежеляет модуль system?
Все то же, что и другие модули.


Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
Сознание новых типов утяжеляет проект или нет ?(если они не используются)
Если не используются - Нет.

Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
В этом смысле функции и константы не должны вроде.
Аналогично.


Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
Глобальные переменные точно должны.
Если не используются - нет. Оптимизатор все режет.
Не режет он только методы классов, которые не используются, но используется сам класс.
При использовании объектов, неиспользуемые методы тоже режутся.

Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
Как всето таки его правельно резать чтобы лишнее (не утяжеляющее) не трогать?
Вырезать все. А потом добавить только то, что действительно необходимо.

Цитата(alexeis1 @ 16.3.2006, 13:54 Найти цитируемый пост)
А как можно удалить вообще системные модули
System и SisInit удалить полностью нельзя.
Но можно сделать их пустыми:
Код
unit SysInit;
interface
implementation
end.

Правда пустой System не скомпилится.
У меня он такой:
Код
unit System;

interface

const kernel = 'kernel32.dll';

procedure _HandleFinally;
procedure _InitExe;
procedure _halt0;
procedure ExitProcess(uExitCode: LongWord);stdcall; external kernel name 'ExitProcess';

type 
  DWORD = LongWord;
  {$EXTERNALSYM DWORD}
  THandle = LongWord;
  PGUID = ^TGUID;
  TGUID = packed record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;
  HINST = THandle;
  HMODULE = HINST;
  HGLOBAL = THandle;

  PPoint = ^TPoint;
  TPoint = packed record
    X: Longint;
    Y: Longint;
  end;
  {$NODEFINE TPoint}
  tagPOINT = TPoint;
  {$NODEFINE tagPOINT}

  PRect = ^TRect;
  TRect = packed record
    case Integer of
      0: (Left, Top, Right, Bottom: Longint);
      1: (TopLeft, BottomRight: TPoint);
  end;
  {$NODEFINE TRect}

procedure Set8087CW(NewCW: Word);
function Get8087CW: Word;

var
  HInstance: LongWord;          { Handle of this instance }
  {$EXTERNALSYM HInstance}

implementation

var
  Default8087CW: Word = $1332;{ Default 8087 control word.  FPU control
                                register is set to this value.
                                CAUTION:  Setting this to an invalid value
                                could cause unpredictable behavior. }

function GetModuleHandle(ModuleName: PChar): Integer; stdcall;
  external kernel name 'GetModuleHandleA';

procedure _HandleFinally;
begin
end;

procedure _InitExe;
begin
  HInstance := GetModuleHandle(nil);
end;

procedure _halt0;
begin
  ExitProcess(0);
end;

procedure Set8087CW(NewCW: Word);
begin
  Default8087CW := NewCW;
  asm
        FNCLEX  // don't raise pending exceptions enabled by the new flags
{$IFDEF PIC}
        MOV     EAX,[EBX].OFFSET Default8087CW
        FLDCW   [EAX]
{$ELSE}
        FLDCW   Default8087CW
{$ENDIF}
  end;
end;

function Get8087CW: Word;
asm
        PUSH    0
        FNSTCW  [ESP].Word
        POP     EAX
end;

end.

Добавлено @ 14:10
Это необходимый минимум для оконных программ.
Для неоконных он еще меньше.
В принципе все, что для оконных можно вынести в другой модуль.
Добавлено @ 14:13
Вот минимальный System для неоконных приложений:
Код
unit System;

interface

const kernel = 'kernel32.dll';

procedure _HandleFinally;
procedure _InitExe;
procedure _halt0;
procedure ExitProcess(uExitCode: LongWord);stdcall; external kernel name 'ExitProcess';

type 
  PGUID = ^TGUID;
  TGUID = packed record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;

implementation

procedure _HandleFinally;
begin
end;

procedure _InitExe;
begin
end;

procedure _halt0;
begin
  ExitProcess(0);
end;

end.

Добавлено @ 14:17
В принципе скомпиленный вариант будет почти одинаков.
Мой вариант чуть больше из-за того, что вычисляет hInstance.
То есть реально только на одну импортируемую функцию больше.
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Если компилятор все неиспользованное удаляет сам то по идее
если убрать все написанное в разделах initialization и finalization и скомпилировать пустой проект то результат должен быть анологичным или я что-то упустил smile
Добавлено @ 14:35
Кстати как компилятору явно указать что нужно использовать именно эти модули system и sysinit а не родные а то не всегда срабатывает помещение в ту же директорию.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @ 16.3.2006, 14:22 Найти цитируемый пост)
если убрать все написанное в разделах initialization и finalization и скомпилировать пустой проект то результат должен быть анологичным

Не совсем. Еще нужно зачистить _HandleFinally, _InitExe, _halt0.
Что нужно зачистить еще я не знаю. Но даже при таком раскладе разница больше килобайта.
Каким-то макаром туда еще менеджер памяти попадает.
Модуль System все же не совсем стандартный - есть в нем еще и внутрисистемные вызовы...
Добавлено @ 14:56
Цитата(alexeis1 @ 16.3.2006, 14:22 Найти цитируемый пост)
а то не всегда срабатывает помещение в ту же директорию.
Если в том же каталоге, то всегда.
По крайней мере при компиляции из коммандной строки точно.
По другому - через настройки проекта.
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

По другому - через настройки проекта.

я в настройках не нахожу такую штуку


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Это в настройках среды.
Menu -> Tools -> Environment Options -> Library -> Library Path
В настройках проекта просто вставь в список Search Path первым свой каталог.
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Snowy, в этом виде ни один из модулей delphi не воспринимает просто игнорирует.
Добавлено @ 16:08
Выложи пожалуйста весь проект с исходниками. smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



У меня 7-ка спокойно компилит без указания каталогов.
Просто бросил файлы в тот же каталог.
Кстати, как обычно из самой дельфи размер получился больше, чем при компиляции из коммандной строки.
Поэтому я всегда собираю батники для компиляции.

А ты скомпилил System.pas? Или просто его туда бросил?
Если не скомпилил, то дельфя их и не увидит. system.pas ей пофигу. Ей нужен system.dcu.
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

А ты скомпилил System.pas

Разве можно это сделать без проекта??
Я так не умею smile
Добавлено @ 16:20
Просто бросил System.pas


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Выкладываю пакет для создания микропрограмм.
В комплекте все необходимое, кроме самого компилятора и редактора ресурсов.
В файле list.txt все файлы подписаны.
Добавлено @ 16:28
Цитата(alexeis1 @ 16.3.2006, 16:19 Найти цитируемый пост)
Разве можно это сделать без проекта??
Это можно сделать только без проекта:
dcc32 -q system -m -y -z -$D-

Присоединённый файл ( Кол-во скачиваний: 87 )
Присоединённый файл  micro.zip 61,44 Kb
PM MAIL   Вверх
Alexeis
Дата 16.3.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Snowy, Так там еще и отладочная информация удалена??
и наверно упакован, а то получается 3 кб.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 16.3.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @ 16.3.2006, 16:48 Найти цитируемый пост)
Snowy, Так там еще и отладочная информация удалена??и наверно упакован, а то получается 3 кб.

Естественно! В txt же все написано. И упаковщик в комплекте.
А ты думал я рожу чудо и сделаю так, что компилятор дельфи будет строить прогу по другому?
Нет. Я просто уменьшил код до минимума.
В самом exe осталось полкило кода и куча пустоты.
Вот эту пустоту мы и ликвидируем при помощи приложенных утилит.
PM MAIL   Вверх
Snowy
Дата 16.3.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ставим рекорды.
Помнится когда-то зашел разговор в религиозных войнах, что Delphi создает огромные ехешники.
Тогда Решили написать HelloWorld на дельфи и на C++.
Мой вариант получился 4096 байт. Размер на C++ составил 1024 байта.
Теперь я готов дать новый ответ.
Вот он. Hello World на дельфи. 1005 байт!
Теперь можете смело ссылаться на этот пост, когда вам скажут, что на дельфи нельзя писать маленькие программы.

Присоединённый файл ( Кол-во скачиваний: 61 )
Присоединённый файл  Hello.zip 0,83 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.