Техника оптимизации под линуха

       

Сокращение количества сравнений


Процессоры семейства x86 (как и многие другие) обладают одну очень интересной концепцией, которой нет ни в одном языке высокого уровня. Операции вида if(a>b) выполняются в два этапа. Сначала из числа a вычитается число b и состояние вычислительного устройства сохраняется в регистре флагов. Различные комбинации флагов соответствуют различным отношениям чисел и за каждый из них отвечает "свой" условный переход. Например:

       cmp eax,ebx   // сравниваем eax с ebx, запоминая результат во флагах

       jl lab_1      // переход, если eax < ebx

       jg lab_2      // переход, если eax > ebx

lab_3:               // раз мы здесь, eax

== ebx



Содержание раздела