(Перенесено Админом)
Большинство будущих программистов часто клюют на лозунги в стиле "Убери всё лишнее в проге и будет она маленькой, словно на Асме." Что бы стереть этот миф с лица земли мы проведем небольшой тест, сравнив две программки, скомпилированные Под Masm-ом и Delphi соответсвенно.
И так приступим:
Запускаем Delphi (5-6-7, не суть важно), создаем новое приложение (File-New-Application) и первым же делом в новоиспеченном монстрике отключаем модули и формы( Топаем в View->Project Manager. Всё что ниже Project1.exe - удаляем ). Далее смотрим в исходник (View source) и отрезаем подключенный модуль Forms. Соответсвенно все объекты, объявленные в Forms отрезаем тоже(между Begin и end удаляем объект Application). Теперь поставим модуль Windows вместо Forms(Для того, что бы прога могла подключать WinAPI) и у нас должно получиться следующее:
- Код:
-
Program Project1;
uses
Windows; { Это подключенный модуль, хотя впринципе его можно обрезать тоже
но тогда программа не сможет ничего делать вообще}
begin
end.
Компилим это чудо по Ctrl+F9 и смотрим на весомость. Ага - 14336 байта в моем случае. Ничего лишнего уже там нету (Даже если к чертям отрезать uses вместе с подключенным модулем Windows, программа сократится всего на ~1000 байт) и оптимизировать далее некуда. По-крайней мере штатным компилятором.
Теперь открываем RadAsm, создаем новый проект (Если вы подключали MASM,TASM,FASM) выбираем в появившемся меню - Win32App и строчим имя проекта - Test. Нажимаем далее и выбираем то, что хотим сделать - Win32.exe.
Проект создан, осталось жмакнуть Ctrl+F5 и ассемблировать его. Появится пустое окошко, что собственно и следовало ожидать.
Мы можем оптимизировать программу вручную, убрав все Апи-функции, вызываемые нашим файлом, но не будем этого делать, а сравним два получивших у нас файла: Test.exe и Project1.exe
Project1.exe - 14 3336 байт
Test.exe - 3072 байтВот и почувствуйте, как говорится, всю задницу оптимизации Языков Высокого Уровня, и это не смотря на то, что в Test.exe мы пользуемся Апи функциями винды, а в Project1.exe уже не хрена ни чем не пользуемся, отрезав по самое нехочу всё, что можно было отрезать.
Вот и верьте всем крикунам, что на языках высокого уровня можно оптимизировать код так, что Ассемблер становится ненужной вещью. Конечно же,
С(язык такой) позволяет создавать программы, по скорости и выполнению почти не уступающих Ассемблерным, но опять же - Ассемблер не тривиальный язык, а язык особый, с помощью которого можно и запороть код, и напротив - улучшить так, как ЯВУ ни когда не смогут из-за рамок, диктуемых им компиляторами.