Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизВ чём разница? Найти похожие ветки
← →
Макс Реалов (2004-02-03 18:23) [0]Здравствуйте, уважаемые.
Есть такой вопрос.
У меня маленькая программка. В ней:
...
uses
Windows, Messages;
...
function bChangeTime(): boolean;
var
pSysTime: TSystemTime;
begin
Result:= False;
GetLocalTime(pSysTime);
if (pSysTime.wHour > 10) and (pSysTime.wHour < 20) and
(not(pSysTime.wDayOfWeek in [0,6])) then
Result:= True;
end;
Если компилю так, то exe-файл получается 8.50 kb (прога у меня без форм).
А если так делаю, то exe-файл получается 14.5 kb:
function bChangeTime(): boolean;
var
pSysTime: PSystemTime;
begin
Result:= False;
New(pSysTime);
GetLocalTime(pSysTime^);
if (pSysTime^.wHour > 10) and (pSysTime^.wHour < 20) and
(not(pSysTime^.wDayOfWeek in [0,6])) then
Result:= True;
Dispose(pSysTime);
end;
В обоих случаях размер, занимаемой памяти программой одинаков (судя по Task Manager"у).
Странно, ведь при объявлении: pSysTime: TSystemTime; место для pSysTime распределяется в стеке, а при: pSysTime: PSystemTime; в куче распределяетя и в ней же потом уничтожается (New/Dispose).
А при сборке паскалевским компилятором в объектник компилятся все ф-ии, которые присутствуют в заголовочных файлов или реально приминяемые?
Где можно подробную спецификацию по компилятору, используемому в Delphi 6.0 прочитать?
В чём дело?
← →
clickmaker (2004-02-03 18:36) [1]
> А при сборке паскалевским компилятором в объектник компилятся
> все ф-ии, которые присутствуют в заголовочных файлов или
> реально приминяемые?
второе
← →
Макс Реалов (2004-02-03 18:58) [2]>> clickmaker © (03.02.04 18:36) [1] :
Ага, а 350 kb мне фея добавляет, когда я просто просисываю модульExtCtrls
вuses
, вообще не используя НИОДНУ ф-ию и не одного типа изExtCtrls
?
Exe-шничек то растёт :)
Так что, похоже компилит всё, а линкует только то, что используется.
← →
clickmaker (2004-02-03 19:08) [3]Ну и в чем проблема? На размер экзешника влияет только линковка
← →
Плохиш (2004-02-03 19:08) [4]
> Так что, похоже компилит всё, а линкует только то, что используется
Хороший орех получается :-))
← →
VMcL (2004-02-03 19:08) [5]>>Макс Реалов (03.02.04 18:58) [2]
>Ага, а 350 kb мне фея добавляет, когда я просто просисываю модуль ExtCtrls в uses
initialization
finalization
← →
Макс Реалов (2004-02-03 19:32) [6]>>VMcL © (03.02.04 19:08) [5]:
не понял. При чём тут это?
← →
Anatoly Podgoretsky (2004-02-03 19:49) [7]А при том, что используется.
← →
Макс Реалов (2004-02-03 19:58) [8]>>Anatoly Podgoretsky © (03.02.04 19:49) [7]:
не понял. Если можно, по подробнее.
Я всегда думал, что в Паскале initialization/finalization для инициализации/деинициализации переменных используется. Разве нет?
← →
VideoLord (2004-02-03 20:29) [9]Там могут еще и какие-нить функции вызываться, которые потом будут тебе в экзешник линковаться
← →
VMcL (2004-02-03 20:45) [10]>>Макс Реалов (03.02.04 19:58) [8]
см. [9] + если создается экземпляр класса при инициализации, то в exe-шник войдут не только вызываемые, но и все виртуальные методы этого класса.
← →
Макс Реалов (2004-02-04 11:14) [11]А если я НИЧЕГО не создаю и не вызываю!!! И что это за "какие-нить функции"???
Может мне кто-нибудь чётко объяснить КАК происходит сборка и линковка в Delphi и от чего зависит размер получаемого exe-ка? То что написано в help"е я и так знал, но это не объясняет некоторых вещей.
← →
KosilkA (2004-02-04 14:36) [12]размер файла при минимальной программе вырастет с 8 до 14 килобайт при любом использовании string. Проверено.
← →
Макс Реалов (2004-02-04 14:53) [13]Удалено модератором
Примечание: Мат даже замаскированый все равно остается матом
← →
KosilkA (2004-02-04 14:58) [14]
> Макс Реалов (04.02.04 14:53) [13]
да , сорри я не вдумался в твой код. но абсолютно такая же ситуация у меня была при использовании/неиспользовании string.
← →
SPeller (2004-02-04 15:43) [15]
> initialization
> finalization
+ все описания классов. Методы не линкуются, а вот описания на размер действуют. Проверено на личном опыте. Если в uses приписать модуль, в котором будет пара-тройка классов, но ничего использоваться не будет, то размер ехе всё-равно вырастет.
← →
ламер (2004-02-04 16:00) [16]Удалено модератором
Примечание: 3 дня RO за мат
← →
Тимохов (2004-02-04 16:03) [17]
> ламер (04.02.04 16:00) [16]
Ты то, что сюда влез?
← →
VMcL (2004-02-04 19:02) [18]2 [15]
>Методы не линкуются
Смотря какие. См. [10].
← →
jack128 (2004-02-04 19:23) [19]
> Какой String нафиг??? Где у меня string"и???
Ну может KosilkA © и прав. Дело может быть не в строках, как таковых, а в дельфийском менеджере памяти, копорый ты пристегиваешь используя GetMem/FreeMem. Но может это и не так, поскольку где то на форуме слышал, что менеджер памяти входит в ЛЮБОЙ проект на дельфи.
← →
Cobalt (2004-02-04 21:01) [20]Можно ещё сравнить ассемблерный код (View->CPU) и увидеть - что добавляется.
← →
noname123 (2004-02-07 15:15) [21]"...где то на форуме слышал, что менеджер памяти входит в ЛЮБОЙ проект на дельфи" - я плакаль :))))))))))
← →
Igor_thief (2004-02-07 15:33) [22]Cobalt © (04.02.04 21:01) [20]
Вот это точно надо сделать, иначе ничего не разберете!
← →
Igor_thief (2004-02-07 15:37) [23]Да, я вот надыбал одну рассылку, тема которой "Оптимизация Дельфи приложений. Шаг за шагом". Может задать автору этой рассылки этот вопросик?
← →
DiamondShark (2004-02-07 17:08) [24]
> Макс Реалов (03.02.04 18:23)
> KosilkA © (04.02.04 14:58) [14]
Менеджер памяти прилинковывается.
← →
Игорь Шевченко (2004-02-07 23:05) [25]Откройте unit SysInit.pas и посмотрите, что там линкуется. Проще, чем спорить
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c