Теоретический вопрос (Delphi): Можно ли при компиляции конечного exe файла уменьшить его размер, если наследник TForm уберет некоторые ее свойства

:( Вот на школьной "олимпиаде" (не участвовал, но можно было решать задачи, часть теоретических) вытащил такой билет. И я не знаю как ответить, поможете?

"Теоретический вопрос (Delphi): Можно ли при компиляции конечного exe файла уменьшить его размер, если наследник TForm уберет некоторые ее свойства"

Про "уберет" ответов и задав вопрос - не нашел, может их можно удалить? или = nil?

Т.е. я так понимаю, что создаем класс

Uses Forms, Classes;

Type
tMyForm=Tform
//...??

// тут,.. не знаю, ну шрифт убрать, чтобы системный умолчальный был или прозрачность end;

var m:tMyform;

...

Знаний не много, что-то могу "написать", но это.. в осадок выпал. Я знаю, что раньше для дельфи были компоненты вроде KOL(COL?) назывались? И там вроде на ассемблере часть кода была. Но сейчас, смотря на D 10.3 где для формы всякие есть прозрачности и шкуры... Не уверен уже. Т.е. наследника от тформ без зависимостей мелкого самого простого (ну пример просто форма с кнопкой ее закрытия) сделать не получится? :( Если у вас есть время, можете пояснить?


Ответы (1 шт):

Автор решения: Alex R.

Именно при компиляции нельзя. Если вы создадите пустую форму и посмотрите на DFM-файл, то свойств там будет не больше десятка, убирать нечего.

Если по простому, то основной размер - это предки TForm, начиная с TObject у них сотни свойств и методов и все они попадают в исполняемый файл, также как и зависимые объекты, которые форма использует. Каких-то специальных опций компилятора для исключения методов класса нет. Единственное компилятор сам исключает неиспользуемые классы и неиспользуемые необъектные функции.

KOL - не использовал VCL, можно считать, что он был написан с нуля, с меньшей глубиной наследования. Если, например, писать на чистом WinAPI, то программа будет вообще килобайты.

Можно уменьшить размер готового исполняемого файла, упаковав его специальными программами, но этим давно уже никто не занимается.


Upd: Немного в сторону от вопроса, но как напомнили в комментарии, что можно уменьшить размер (~5%), отключив формирование системной информации RTTI (опция $WEAKLINKRTTI).

→ Ссылка