MASM32 и DELPHI - битва за размер…

Источник: pblog

Часто говорят о потребностях в оптимизации проекта с целью уменьшения размера программы… Delphi является аутсайдером по этому показателю среди основных языков для разработки системных приложений… Действительно у ламеров есть очень сильный (как им кажется) аргумент - Делфи создаёт пустой проект весом почти 400 кб)).. Напротив асемблер считается передовиком направления создания компактных приложений и по мнению ламеров разница в размерах огромна по сравнению с делфи… Да это так.. но всё же давайте попробуем написать программу хеллоу ворлд… выводящую просто окошко с заголовком Hallo и строкой Hallo World!!! напишим мы эти проги на Delphi и Asm… и посмотрим какая будет разница в размере…

Asm:

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.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 байта… И вообще РЕМ не первый писал об этом ведь не он написал компилятор делфи и линкер))… Да цель статьи получить минимум на делфи… с чем в общем-то и справились…


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=21191