Ассемблер - экстремальная оптимизация


Листинг1 запуск процесса на выполнение через win32 API – 12 команд и 73h байта


Ассемблированный код занимает 1Fh байт и еще 54h байта расходуются на структуры PROCESS_INFORMATION и STARTUPINFO плюс длина имени файла. А вот что получится, если воспользоваться морально "устаревшей" функцией WinExec, доставшийся в наследство от 16-разрядной старушки Windows (вопреки распространенному заблуждению, она реализована одновременно как 16- и 32-разрядная функция, а потому перехода в 16-разрядный режим при вызове WinExec из 32-разрядного кода не происходит, а, значит, не происходит и падения производительности):

 

       push 00h             ; uCmdShow (короче чем XOR EAX,EAX/PUSH EAX)

       push offset file_name      ; имя исполняемого файла с аргументами

       call ds:[WinExec]    ; косвенный вызов API-функции через IAT




Начало  Назад  Вперед



Книжный магазин