Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

В чём разница?   Найти похожие ветки 

 
Макс Реалов   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
14-94090
syte_ser78
2004-02-10 14:37
2004.02.29
День святого Валентина


1-94009
Zarina
2004-02-17 07:33
2004.02.29
Выбор повторяющихся полей


14-94166
PaRL
2004-02-02 22:39
2004.02.29
---|Ветка была без названия|---


11-93822
R
2003-06-06 18:10
2004.02.29
TPopUpMenu


1-93837
Julliete
2004-02-13 14:02
2004.02.29
постраничная сумма QReport