Рубрики

Методы оптимизации | Набор 2 (обмен)

Как поменять две переменные?

Вопрос может выглядеть глупым, но не вызывающим. Смотрите следующий фрагмент кода, чтобы поменять местами два целых числа ( XOR swapping ),

void myswap(int *x, int *y)
{
   if (x != y)
   {
      *x^=*y^=*x^=*y;
   }
}

На первый взгляд, мы можем думать, что ничего плохого в коде. Тем не менее, когда его попросили указать причину выбора логики свопинга XOR, человек не понял. Возможно, любая коммутативная операция может удовлетворить потребность с некоторыми угловыми случаями.

Избегайте использования необычных фрагментов кода в производственном программном обеспечении. Они создают сюрпризы во время выполнения. Мы можем наблюдать следующие замечания по приведенному выше коду

  1. Поведение кода не определено. Утверждение * x ^ = * y ^ = * x ^ = * y; изменение переменной более одного раза без какой-либо точки последовательности .
  2. Он создает конвейерные остановки при выполнении на процессоре с конвейерной архитектурой.
  3. Компилятор не может воспользоваться преимуществами оптимизации операции подкачки. Некоторые процессоры предоставляют одну инструкцию для замены двух переменных. Когда мы выбрали стандартные функции библиотеки, есть больше шансов, что библиотека была бы оптимизирована. Даже компилятор может распознавать такую стандартную функцию и генерирует оптимальный код.
  4. Читаемость кода плохая. Очень важно писать поддерживаемый код.

Спасибо Venki за написание вышеуказанной статьи. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Методы оптимизации | Набор 2 (обмен)

0.00 (0%) 0 votes