Часто говорят о потребностях в оптимизации проекта с целью уменьшения размера
программы… Delphi является аутсайдером по этому показателю среди основных языков
для разработки системных приложений… Действительно у ламеров есть очень сильный
(как им кажется) аргумент - Делфи создаёт пустой проект весом почти 400 кб))..
Напротив асемблер считается передовиком направления создания компактных
приложений и по мнению ламеров разница в размерах огромна по сравнению с делфи…
Да это так.. но всё же давайте попробуем написать программу хеллоу ворлд…
выводящую просто окошко с заголовком Hallo и строкой Hallo World!!! напишим мы
эти проги на Delphi и Asm… и посмотрим какая будет разница в размере…
Asm:
.386
.model flat, stdcall
option casemap:none
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includeuser32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
.data
MsgCaption db "Hallo World!!!",0
MsgBoxText db "Hallo",0
.code
start:
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
invoke ExitProcess,NULL
end start
Компиляция:
из MASM32 + укороченный стаб весом 64 байта..
Сохраняем код и кидаем его в файл: asm.asm…
Создаём ВАТ-ник с текстом:
@ml /c /coff /nologo asm.asm
@Link /ALIGN:4 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text
/stub:stub.bin asm.obj
Имеем ехе-шник весом 624 байта… Нормально… Теперь давай тоже самое на делфи…
DeLpHi:
unit H;
interface
Procedure Start;
implementation
function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PChar; uType: Cardinal):
Integer; stdcall; external 'user32.dll' name '_MessageBoxA@16';
Procedure Start;
begin
MessageBoxA(0,'Hallo World!!!','Hallo',0);
end;
end.
Компиляция:
dcc32.exe (от делфи3), Link.ExE, MSPDB50.DLL,(SYSINIT.DCU,SYSTEM.DCU - c
урезанным RTL),USER32.LIB + стаб 64 байта….. Сохраняем код в файл: pas.pas…
Создаем ВАТ-ник c текстом:
@dcc32.exe -JP pas.pas
@link.exe /ALIGN:4 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text
/ENTRY:Start$qqrv /STUB:stub.bin user32.lib pas.obj
Кидаем в одну папку получаем размер ехе - 672 байта…
Итог: ни вижу ни малейшего повода поводя считать делфи громозким языком))))
Коментарии на тему что это из журнала хакер не принимаются… В статье МС-РЕМа
размер 832 байта… И вообще РЕМ не первый писал об этом ведь не он написал
компилятор делфи и линкер))… Да цель статьи получить минимум на делфи… с чем в
общем-то и справились…
|