Война миров - ассемблер против си


Листинг4 результат трансляции crc() компилятором GCC 2.95


В отличии от MS VC, компилятору GCC хватило всего 4х регистров без обращения к локальным переменным, а сам код уложился в 30h байт, что на 4 байта короче, чем у конкурента, но до ручной ассемблерной оптимизации еще все равно далеко. Однако, если присмотреться к телу цикла повнимательнее, можно обнаружить, что GCC, в отличие от MS VC, совместил счетчик цикла с инкрементом указателя, то есть, откомпилированный цикл исполняется практически с той же самой степенью эффективности, что и ручной. "Практически" — потому, что в отличии от нас, компилятор использовал сложную адресацию "ADD AL, [EDX+EBX]", напрягающую процессор и требующую нескольких экстра тактов на декодирование (впрочем, к последним версиям P-4 и Athlon это уже не относится).

 




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