Почему функция
int max1(int x,int y)
{
return x>y ? x : y;
}
работает медленнее, чем
int max2(int x,int y)
{
return x
Вот нашёл статью про это даже (в конце таблицы сравнения скоростей)
Вот моё сравнение:
#include
Ответ
Я как раз недавно рассматривал подобный вопрос в этой статье (в самом конце).
У меня получилось так, что на архитектуре x86 всё зависит от порядка сравнения. Если x сравнивается с y, то компилятор даёт одну последовательность команд, а если наоборот, то другую последовательность тех же самых команд. Причина разницы в скорости, видимо, в особенностях микроархитектуры. Одна последовательность команд, видимо, лучше ложится на конвейер или ещё какие-то сторонние факторы влияют.
Это общая беда, наверное, всех процессоров Intel. Аналогично, я заметил, что команда inc eax будет работать медленнее, чем lea eax, [eax+1]. Подобных приколов, наверное, ещё много.
Комментариев нет:
Отправить комментарий