Статьи по Assembler




Зачем он нужен, этот ассемблер? - часть 5


Теперь сравним результаты разработки, то есть готовые приложения. Это гораздо интереснее. Допустим, вы shareware-программист. Тогда вы должны знать, что сегодня почти невозможно придумать что-нибудь новенькое, аналогов чему не нашлось бы на бесчисленных download-серверах. Чаще всего разработанная вами программа попадает в категорию, где уже лежит десяток-другой ее близких и дальних родственников. И еще вы должны знать, что, каким бы завлекательным и подробным ни было описание приложения, первый взгляд, который бросает пользователь, играющий роль буриданова осла(по Стругацким - барана), падает на графу "размер".

Об ассемблере ходят слухи, что он позволяет писать самые компактные из компактных программы. Так ли это на самом деле?

Размер исполняемого модуля mycall.exe в реализации на C++ - 8704 байта. На ассемблере - 8704 байта.

Разочарование! Никакого выигрыша!

Стоп. Давайте сначала вспомним, что речь идет о PE-файле. И имеет смысл заглянуть внутрь него: так ли уж все одинаково в том и другом случае, как кажется на первый взгляд.

имя
секции
назначение
секции
размер в файле размер в памяти
C++(speed) C++(size) asm C++(speed) C++(size) asm
.text код 1000h (4096) 0e00h (3584) 0e00h (3584) 0f22h (3874) 0c84h (3204) 0c54h (3156)
.rdata константы нет нет 0400h (1024) нет нет 0315h (789)
.data переменные 0400h (1024) 0400h (1024) 0 042ch (1068) 042ch (1068) 05c1h (1473)
.idata данные импорта 0400h (1024) 0400h (1024) 0400h (1024) 03eeh (1006) 03eeh (1006) 03eah (1002)
.rsrc ресурсы 0800h (2048) 0800h (2048) 0800h (2048) 0648h (1608) 0648h (1608) 0648h (1608)

В этой таблице перечислены все секции PE-файла приложения в каждой из трех реализаций: на C++ с оптимизацией по времени выполнения, на C++ с оптимизацией по размеру и на ассемблере.

Кстати, размер исполняемого модуля в реализации C++ с оптимизацией по времени выполнения несколько больше - 9216 байт. Но при программировании приложений для Windows такую оптимизацию использовать обычно нет смысла, так как многозадачная архитектура и механизм сообщений отнимают куда больше временного ресурса, чем может дать выигрыш от нее.




Содержание  Назад  Вперед